如何在带授权的IIS Rewrite规则中配置CORS设置
问题根因
该报错由CORS预检(OPTIONS)请求校验触发:你当前的配置仅调整了跨域源允许规则,没有在预检响应的Access-Control-Allow-Headers列表中显式允许authorization请求头,不符合浏览器CORS安全校验要求,因此请求被拦截。
修改步骤
- 首先进入IIS对应站点的「URL重写」功能,点击右侧「查看服务器变量」,新增2个允许修改的服务器变量:
RESPONSE_Access_Control_Allow_HeadersRESPONSE_Access_Control_Allow_Methods
- 替换站点根目录下的
web.config配置,完整可运行配置如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <!-- 新增OPTIONS预检请求处理规则,直接返回204,无需转发到后端 --> <rule name="HandleOptionsPreflight" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{REQUEST_METHOD}" pattern="^OPTIONS$" /> </conditions> <action type="CustomResponse" statusCode="204" statusDescription="No Content" /> </rule> <!-- 原有API重写规则 --> <rule name="api"> <match url="^api/(.*)" /> <action type="Rewrite" url="https://mydomain.com/api/{R:1}" /> <serverVariables> <set name="HTTP_Authorization" value="Basic c13546tYW4uaASWJh79864L=" /> </serverVariables> </rule> </rules> <outboundRules> <clear /> <!-- 原有跨域源允许规则 --> <rule name="api"> <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> <add input="{HTTP_ORIGIN}" pattern="(.*)" /> </conditions> <action type="Rewrite" value="{C:0}" /> </rule> <!-- 新增允许authorization等请求头的规则 --> <rule name="AllowCORSHeaders"> <match serverVariable="RESPONSE_Access_Control_Allow_Headers" pattern=".*" /> <action type="Rewrite" value="authorization,content-type" /> </rule> <!-- 新增允许常用请求方法的规则 --> <rule name="AllowCORSMethods"> <match serverVariable="RESPONSE_Access_Control_Allow_Methods" pattern=".*" /> <action type="Rewrite" value="GET,POST,PUT,DELETE,OPTIONS" /> </rule> </outboundRules> </rewrite> </system.webServer> </configuration>
注意:如果有其他自定义请求头需要允许,直接在
Access-Control-Allow-Headers的value中添加,多个值用英文逗号分隔即可。
内容的提问来源于stack exchange,提问作者barteloma
相关产品推荐
相关产品推荐

