我了解CORS以及如何在服务器响应中设置适当的Access-Control- *标题。我发现的问题是,即使我的服务器使用Access-Control-Allow-Origin:*
进行响应,Chrome仍拒绝接受响应。访问控制 - 允许来源无法被Chrome识别
OPTIONS请求:
OPTIONS /api/shows/1 HTTP/1.1
Host: *****
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Access-Control-Request-Headers: accept, platform, version
Accept: */*
Referer: http://local host:8888/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
响应:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 0
Content-Type: */*
Content-Encoding: gzip
Expires: -1
Server: Microsoft-IIS/8.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Platform, Version
Access-Control-Allow-Methods: OPTIONS, TRACE, GET, HEAD, POST, PUT, DELETE
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 03 Oct 2014 19:07:28 GMT
在调试控制台,浏览器就会显示:
的XMLHttpRequest无法加载的http:// ****/API /节目/ 1。 对请求的资源没有“访问控制允许来源”标题。因此不允许访问Origin'localhost:8888'。
显然,是访问控制允许来源中的回应,但由于某种原因Chrome认为它是无效的?有没有我无法使用通配符进行响应的情况?
在此先感谢!
是您的浏览器也发送预检请求后的*实际*请求?或者,您的最终目标是真正读取OPTIONS响应(即,您的Ajax代码执行xhr.open(“OPTIONS”,“/ api/shows/1”)),并且您认为这*是实际请求? (即使这样,这仍然是一个预检,因为OPTIONS是一个非简单的HTTP方法,但这对你来说会更加困惑。) – apsillers 2014-10-03 19:31:03
是的,浏览器跟着一个GET请求,但它被放弃了。感谢你的想法。 – providencemac 2014-10-03 19:39:02
只要100%清楚,通过“废弃”你的意思是GET请求永远不会被发送? (在Chrome网络检查器中它变成红色?) – apsillers 2014-10-03 19:46:13