IIS 10预检请求遭CORS拦截,安装CORS模块出现500错误
IIS 10 闭源API CORS预检404及模块安装500问题解决
问题背景
对接运行在IIS 10服务器上的闭源API,React前端最初所有请求均被CORS拦截。已在IIS中添加以下自定义CORS响应头:
Access-Control-Allow-Origin: <IP:PORT> Access-Control-Allow-Methods: * Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: *
目前普通请求可正常执行,但OPTIONS预检请求返回404,报错信息:Access to XMLHttpRequest from origin has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status
尝试安装官方IIS CORS模块后,服务器出现500错误。
解决方案
1. 修复预检请求404(无需额外安装模块)
由于API是闭源无法修改后端代码处理OPTIONS请求,可通过IIS URL重写模块直接拦截并返回合法响应:
- 打开IIS管理器,进入目标站点,点击「URL重写」
- 添加空白规则,配置如下:
- 规则名称:
Handle OPTIONS Preflight - 匹配URL:选择「通配符」,模式设为
* - 条件:添加条件,输入
{REQUEST_METHOD},匹配类型选「精确匹配」,值为OPTIONS - 操作:选择「自定义响应」
- 状态代码:
200 - 状态描述:
OK - 响应头:添加你已配置的所有CORS头(和之前手动添加的一致)
- 状态代码:
- 规则名称:
- 保存规则后,测试预检请求是否返回200状态码
2. 解决CORS模块安装后的500错误
若必须使用官方CORS模块,500错误多由配置冲突或依赖缺失导致:
- 先删除之前手动添加的自定义CORS响应头,避免和模块规则冲突
- 检查IIS是否已安装
URL Rewrite和Application Request Routing (ARR)模块,CORS模块依赖这两个组件 - 重新安装CORS模块后,在站点「CORS」配置界面仅保留必要规则:
- 允许来源设为前端的
<IP:PORT> - 允许方法勾选所需类型(或直接选
*) - 勾选「允许凭据」
- 允许头设为
*
- 允许来源设为前端的
- 重启IIS服务后再次测试
3. 额外排查方向
- 检查IIS站点的「处理程序映射」,确认未禁止OPTIONS请求的处理权限
- 查看服务器事件查看器(Windows日志→应用程序),获取500错误的详细日志,定位具体报错原因
内容的提问来源于stack exchange,提问作者Hossam Mohamed
相关产品推荐
相关产品推荐

