首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在IIS7上启用跨域资源共享

在IIS7上启用跨域资源共享
EN

Stack Overflow用户
提问于 2012-09-17 19:40:54
回答 7查看 247.1K关注 0票数 96

我最近遇到了将Javascript请求发布到另一个域的问题。默认情况下,不允许将XHR发布到其他域。

按照http://enable-cors.org/的说明,我在另一个域上启用了它。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
    </customHeaders>
  </httpProtocol>
 </system.webServer>
</configuration>

现在一切正常,但是在发送回工作的200响应之前,它仍然返回405响应。

代码语言:javascript
复制
Request URL:http://testapi.nottherealsite.com/api/Reporting/RunReport
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:origin, content-type, accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:testapi.nottherealsite.com
Origin:http://test.nottherealsite.com
Referer:http://test.nottherealsite.com/Reporting
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Response Headersview source
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin:*
Allow:POST
Cache-Control:private
Content-Length:1565
Content-Type:text/html; charset=utf-8
Date:Tue, 18 Sep 2012 14:26:06 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

更新日期: 3/02/2014

MSDN杂志上有一篇最近更新的文章。详细介绍了ASP.NET Web API2中的CORS支持。

http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

EN

回答 7

Stack Overflow用户

发布于 2013-06-28 14:05:59

我不能发表评论,所以我必须把这个放在一个单独的答案中,但它与Shah接受的答案有关。

我最初遵循了Shahs的回答(谢谢!)通过在IIS中重新配置OPTIONSVerbHandler,但当我重新部署应用程序时,我的设置已恢复。

我最终删除了我的Web.config中的OPTIONSVerbHandler。

代码语言:javascript
复制
<handlers>
    <remove name="OPTIONSVerbHandler"/>
</handlers>
票数 29
EN

Stack Overflow用户

发布于 2013-04-26 13:28:34

我发现在http://help.infragistics.com/Help/NetAdvantage/jQuery/2013.1/CLR4.0/html/igOlapXmlaDataSource_Configuring_IIS_for_Cross_Domain_OLAP_Data.html上找到的信息对在IIS7中为WCF服务设置HTTP选项非常有帮助。

我将以下内容添加到我的web.config中,然后将IIS7“处理程序映射”列表中的OPTIONSVerbHandler移到列表的顶部。我还通过双击处理程序映射部分中的处理程序,然后单击“Request Restrictions”,然后单击access选项卡,为OPTIONSVerbHander提供了读访问权限。

不幸的是,我很快发现IE似乎不支持向其XDomainRequest对象添加头部(将Content-Type设置为文本/xml并添加SOAPAction头部)。

我只是想分享一下,因为我花了大半天的时间来寻找如何处理它。

代码语言:javascript
复制
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" />
            <add name="Access-Control-Allow-Headers" value="Content-Type, soapaction" />
        </customHeaders>
    </httpProtocol>
</system.webServer>
票数 25
EN

Stack Overflow用户

发布于 2012-09-17 21:10:09

405响应是一个“不允许的方法”响应。听起来您的服务器未正确配置为处理CORS印前检查请求。你需要做两件事:

1)使IIS7能够响应HTTP OPTIONS请求。您将获得405,因为IIS7拒绝了OPTIONS请求。我不知道怎么做,因为我不熟悉IIS7,但在Stack Overflow上可能还有其他人知道。

2)配置您的应用程序响应CORS印前检查请求。您可以通过在<customHeaders>部分中的Access-Control-Allow-Origin行下面添加以下两行来完成此操作:

代码语言:javascript
复制
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />

您可能需要根据请求请求的标头将其他值添加到Access-Control-Allow-Headers部分。您有发出请求的示例代码吗?

您可以在此处了解更多关于CORS和CORS印前检查的信息:http://www.html5rocks.com/en/tutorials/cors/

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12458444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档