IIS 7配置CORS规则后跨域请求仍报CORS错误该如何解决?
IIS跨域(CORS)配置报错排查及解决方法
核心排查项
- 检查IIS CORS模块是否安装
IIS默认不会预装CORS模块,仅配置web.config的cors节点不会生效。需要进入服务器管理器的「角色和功能安装向导」,依次找到「Web服务器(IIS)→ 万维网服务 → 安全性」,勾选「CORS模块」完成安装后重启IIS。 - 检查OPTIONS请求是否被拦截
默认IIS的OPTIONSVerbHandler、WebDAV模块会提前拦截OPTIONS预检请求,导致CORS逻辑无法正常执行。需要在web.config的system.webServer节点下添加如下配置放行OPTIONS请求:
<handlers> <remove name="OPTIONSVerbHandler" /> </handlers> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> </modules>
- 检查是否缺失允许请求头配置
你当前的配置仅开放了请求方法,未配置允许的请求头。如果前端请求携带了Content-Type: application/json、Authorization等自定义头,IIS会直接拒绝跨域请求。需要在cors的origin配置下补充allowHeaders节点,测试阶段可以先配置通配符:
<allowHeaders> <add header="*" allowed="true" /> </allowHeaders>
- 检查是否存在凭据与通配符Origin冲突
如果前端请求开启了withCredentials: true(含Cookie、HTTP认证等凭据的跨域请求),CORS规范不允许使用origin="*"的通配符配置,必须显式指定允许的请求源域名,同时添加允许凭据的配置:
<cors enabled="true" failUnlistedOrigins="false"> <add origin="https://你的前端域名" allowed="true"> <allowHeaders> <add header="*" /> </allowHeaders> <allowMethods> <add method="OPTIONS" /> <add method="POST" /> <add method="GET" /> </allowMethods> <allowCredentials>true</allowCredentials> </add> </cors>
- 检查是否重复配置CORS响应头
如果同时在IIS CORS模块、应用代码(如ASP.NET Core中间件、自定义响应头配置)中添加了CORS相关头,会导致响应头中出现重复的Access-Control-Allow-Origin字段,浏览器会判定跨域失败。仅保留一处CORS配置即可。
验证方式
可以直接用curl命令发起预检请求验证配置是否生效,命令如下:curl -v -X OPTIONS -H "Origin: 你的前端请求源域名" -H "Access-Control-Request-Method: POST" 你的IIS接口地址
如果返回的响应头中包含正常的Access-Control-Allow-Origin等CORS相关字段,说明配置生效。
内容的提问来源于stack exchange,提问作者user2097439
相关产品推荐
相关产品推荐

