我最近遇到了将Javascript请求发布到另一个域的问题。默认情况下,不允许将XHR发布到其他域。
按照http://enable-cors.org/的说明,我在另一个域上启用了它。
<?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响应。
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支持。
发布于 2013-06-28 14:05:59
我不能发表评论,所以我必须把这个放在一个单独的答案中,但它与Shah接受的答案有关。
我最初遵循了Shahs的回答(谢谢!)通过在IIS中重新配置OPTIONSVerbHandler,但当我重新部署应用程序时,我的设置已恢复。
我最终删除了我的Web.config中的OPTIONSVerbHandler。
<handlers>
<remove name="OPTIONSVerbHandler"/>
</handlers>
发布于 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头部)。
我只是想分享一下,因为我花了大半天的时间来寻找如何处理它。
<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>
发布于 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
行下面添加以下两行来完成此操作:
<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/
https://stackoverflow.com/questions/12458444
复制相似问题