IIS 7.5的CORS设置

时间:2015-02-12 21:53:34

标签: asp.net iis iis-7.5 cors options

有人可以帮助我,转换下面的代码,以便在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]

2 个答案:

答案 0 :(得分:23)

如果您要求解决 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>
    
  2. 如果您有Content-type          ajax 调用中的参数或您正在执行PUT请求。请注意         被视为 PreFlight requests.Preflight请求正在执行         发送主要请求(PUT,DELETE等)之前 OPTION 请求。你可以         将以下方法添加到您的global.asax文件中以成功传递OPTION过程:

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

    要了解有关预检请求的更多信息,您可以查看here

         

    对于2号解决方案,您可以获得here

    的详细信息

答案 1 :(得分:1)

需要考虑一些更新,因为 Chrome 现在添加了strict-origin-when-cross-origin 作为默认的referrer-policy,所以如果你没有在web.config 中设置referrer 策略,你可能仍然会遇到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>