我理解CORS以及如何在服务器响应上设置适当的Access-Control- *标头。我发现的问题是,即使我的服务器使用Access-Control-Allow-Origin:*
进行回复,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
在调试控制台中,Chrome会显示:
XMLHttpRequest无法加载http:// **** / api / shows / 1。 请求的资源上没有'Access-Control-Allow-Origin'标头。因此不允许原点'localhost:8888'访问。
显然,在响应中是一个Access-Control-Allow-Origin,但由于某些原因,Chrome认为它无效?是否存在无法使用通配符进行此响应的情况?
提前致谢!
答案 0 :(得分:3)
在这种情况下,我也通过在Access-Control-*
响应中包含GET
标头来解决了这个问题。根据我对规范的理解,这不应该是必需的,但问题是通过这种方式解决的。
如果有人对此有解释,我很乐意听到它
答案 1 :(得分:1)
Access-Control-Request-Headers区分大小写...... 接受应该接受
答案 2 :(得分:-1)
转到“桌面”,选择“Google Chrome”图标并“右键单击”,然后转到“属性”
在属性中找到带有标签“Target”的输入框,在此框中铬的位置如下所示。
“C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe”--disable-web-security --user-data-dir =“c:/ someFolderName”
最后,新鲜启动Chrome以在屏幕顶部看到一个带黄色的弹出窗口
祝你好运