这两天搞个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>