IIS 7.5 的 CORS 设置

12

我该如何将以下代码转换为适用于IIS 7.5的web.config文件,并在web.config文件中放置每个代码片段的位置应该是哪里?

# Always set these headers.
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
 
# Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

根据网站http://enable-cors.org/server_iis7.html的建议,我已经在我的web.config文件中添加了<add name="Access-Control-Allow-Origin" value="*" />。但是在Firefox中,我收到了以下消息 - 跨域请求被阻止:同源策略禁止读取远程资源https://lrpspsprd02.lhl.co.nz/ZFP/Dicom/UrlAuthentication?mode=StandAloneLaunch。可以通过将资源移动到相同的域或启用CORS来解决这个问题。 - Vernon Wainohu
2个回答

28
如果您是在解决CORS问题,可以按照以下解决方案进行操作。
注意:在添加下列内容之前,请考虑安全问题。
1. 将以下代码添加到您的 web.config 文件中:
<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
      <add name="Access-Control-Allow-Credentials" value="true"/>
      <add name="Access-Control-Allow-Headers" value="X-Requested-With, origin, content-type, accept" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
  • 如果你在你的ajax调用中有Content-type参数,或者你正在进行PUT请求。这些都被视为预检请求。预检请求会在发送主请求(PUT、DELETE等)之前执行OPTION请求。您可以将下面的方法添加到global.asax文件中,以成功通过OPTION过程:

  • protected void Application_BeginRequest()
    {
        if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
        {
            Response.Flush();
        }
    }
    

    如果您想了解有关Preflight请求的更多信息,请单击此处

    有关第2种解决方案的详细信息,请单击此处


    我不得不在<customHeaders>前面添加以下行,以防止重复条目错误: <remove name="Access-Control-Allow-Origin" /> <remove name="Access-Control-Allow-Methods" /> <remove name="Access-Control-Allow-Credentials" /> <remove name="Access-Control-Allow-Headers" /> - Fabien
    感谢@zehra Subas。对我来说,我只需要添加这两行头文件:Access-Control-Allow-Origin和Access-Control-Allow-Headers:<add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="X-Requested-With, origin, content-type, accept" /> - Sotiris Zegiannis
    欢迎 :) @SotirisZegiannis - Zehra Subaş
    1
    还有一个IIS CORS模块,使用<cors>标签,更多信息可以在https://learn.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference找到。 - Ehtesh Choudhury

    1

    现在Chrome默认添加了strict-origin-when-cross-origin作为引荐策略,因此如果您在web.config中没有设置引荐策略,则可能仍会遇到CORS问题。以下是我在将本地主机测试程序与远程服务器进行测试时的设置(这些设置不建议用于生产环境):

    <system.webServer>
       <httpProtocol>
         <customHeaders>
             <add name="Referrer-Policy" value="no-referrer" />
             <add name="Access-Control-Allow-Origin" value="*" />
             <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
             <add name="Access-Control-Allow-Credentials" value="true"/>
             <add name="Access-Control-Allow-Headers" value="X-Requested-With, origin, content-type, accept" />
         </customHeaders>
       </httpProtocol>
    </system.webServer>
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接