逐浪云主机

立即开通

IIS怎么设置跨域访问2:ajax跨域IIS的Access-Control-Allow-Origin怎么设置多个域名?

作者:本站编辑 发布时间:2024-11-15 来源:本站原创 点击数:

问题:
我把header写在IIS的HTTP响应标头里,怎么设置多个域名?设置*太不安全了

在这里插入图片描述


一般来说,如果是要允许跨域访问,最简单的设置,就是在 Web.config 中,将 Access-Control-Allow-Origin 设置为 * 即可,如下所示:

  1. 1.
    < system.webServer>
  2. 2.
    -- 其它配置 --
  3. 3.
  4. 4.
    < httpProtocol>
  5. 5.
    < customHeaders>
  6. 6.
    -- 跨域配置 --
  7. 7.
    < add name="Access-Control-Allow-Origin" value="*" />
  8. 8.
    < /customHeaders>
  9. 9.
    < /httpProtocol>
  10. 10.
    < /system.webServer>

但是对于强迫症来说,这样大而全的设置,感觉上不利于网站的安全。那么,如果要具体的指定允许跨域访问的域名,怎么处理呢?

第一种情况:指定具体的单个域名。

这种情况很好处理,在上面的配置中,将 Access-Control-Allow-Origin 的 value 设置为该域名(http://bbb.aaa.com)即可,注意:不能使用泛域名。

第二种情况:指定多个域名。

这种情况,就不能在上述的 value 中写入多个域名了,哪怕用逗号分隔,也完全没有用。

这时,可以使用 URL Rewrite 组件达到这个效果。

URL Rewrite 的安装方式:

可以从微软官方下载 URL Rewrite(支持 IIS 7 以及之后的版本) https://www.iis.net/downloads/microsoft/url-rewrite

可以在 IIS 中使用 Web 平台安装器 进行安装
https://www.microsoft.com/web/downloads/platform.aspx

该组件安装好后(重启服务器),在 Web.config 中定位到 <system.webServer>,不用再添加 <httpProtocol> 中的跨域配置了,取而代之的是添加 <rewrite> 的配置,如下所示:

  1. 1.
    < system.webServer>
  2. 2.
  3. 3.
    < rewrite>
  4. 4.
    < outboundRules>
  5. 5.
    < rule name="AddCrossDomain">
  6. 6.
    < match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
  7. 7.
    < conditions logicalGrouping="MatchAll" trackAllCaptures="true">
  8. 8.
    < add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?domain1\.com|(.+\.)?domain2\.com|(.+\.)?domain3\.com))" />
  9. 9.
    < /conditions>
  10. 10.
    < action type="Rewrite" value="{C:0}" />
  11. 11.
    < /rule>
  12. 12.
    < /outboundRules>
  13. 13.
    < /rewrite>
  14. 14.
    < /system.webServer>

至此,允许多个指定域名的跨域访问就配置完了。

本文责任编辑: 加入会员收藏夹 点此参与评论>>
复制本网址-发给QQ/微信上的朋友