这两天搞个JS跨域请求,发现用户是Windows服务器,用的IIS,而且跨域还是多域名,完了撒.IIS自带的HTTP标头只能填写一个值.特意网上溜达了一圈,发现不少人遇到这个问题都没解决.如下图所示.
默认生成web.config如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
这尼玛,你填写多个值就会报错,直接修改web.config也不行.
解决办法,首先你的IIS得安装了微软的URL Rewrite插件.然后编辑你要设置CORS多域名的站点下的web.config文件,把原本<httpProtocol>
中的跨域配置替换为<rewrite>
配置,如下:
<system.webServer>
<!-- CORS跨域配置 -->
<rewrite>
<outboundRules>
<rule name="AddCrossDomain">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?duckduckgo\.com|(.+\.)?google\.com|(.+\.)?bing\.com))" />
</conditions>
<action type="Rewrite" value="{C:0}" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>