Chrome 无法识别 Access-Control-Allow-Origin

pro*_*mac 3 javascript ajax access-control cors

我了解 CORS 以及如何在服务器响应上设置适当的 Access-Control-* 标头。我发现的问题是,即使我的服务器正在响应Access-Control-Allow-Origin:*,Chrome 也拒绝接受响应。

选项请求:

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
Run Code Online (Sandbox Code Playgroud)

回复:

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
Run Code Online (Sandbox Code Playgroud)

在调试控制台中,Chrome 显示:

XMLHttpRequest 无法加载 http://****/api/shows/1。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'localhost:8888'。

显然,一个访问控制允许来源的响应,但由于某种原因铬认为它是无效的?是否存在无法在此响应中使用通配符的情况?

提前致谢!

pro*_*mac 5

在这种情况下,我通过Access-Control-*GET响应中也包含标头来解决这个问题。根据我对规范的理解,这应该不是必需的,但问题是这样解决的。

如果有人对此有解释,我很想听听


Bec*_*fly 0

Access-Control-Request-Headers 区分大小写...accept 应该是 Accept

  • 来自 http://www.html5rocks.com/en/tutorials/cors/ HTTP 标头匹配(不区分大小写):接受 Accept-Language Content-Language Last-Event-ID Content-Type,但仅当该值为以下之一时:应用程序/x-www-form-urlencoded multipart/form-data text/plain (4认同)