2014-10-03 77 views
1

我了解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认为它是无效的?有没有我无法使用通配符进行响应的情况?

在此先感谢!

+2

是您的浏览器也发送预检请求后的*实际*请求?或者,您的最终目标是真正读取OPTIONS响应(即,您的Ajax代码执行xhr.open(“OPTIONS”,“/ api/shows/1”)),并且您认为这*是实际请求? (即使这样,这仍然是一个预检,因为OPTIONS是一个非简单的HTTP方法,但这对你来说会更加困惑。) – apsillers 2014-10-03 19:31:03

+0

是的,浏览器跟着一个GET请求,但它被放弃了。感谢你的想法。 – providencemac 2014-10-03 19:39:02

+1

只要100%清楚,通过“废弃”你的意思是GET请求永远不会被发送? (在Chrome网络检查器中它变成红色?) – apsillers 2014-10-03 19:46:13

回答

1

访问控制请求报头是区分大小写的... 接受应该接受

+0

你能提供这方面的引文吗?我在W3c规范中看不到任何标题区分大小写:http://www.w3.org/TR/cors/此外,Chrome会自动将标题名称更改为小写字母,因此我会很惊讶如果是这样的话 – providencemac 2014-10-04 13:30:47

+3

从http://www.html5rocks.com/en/tutorials/cors/ HTTP头匹配(不区分大小写): 接受 接受语言 内容语言 最后,事件ID Content-Type,但前提是该值为: application/x-www-form-urlencoded multipart/form-data text/plain – Beckafly 2014-10-04 18:26:59

1

在这种情况下,我解决这个问题也通过包括在GET响应Access-Control-*头为好。根据我对规范的理解,这不应该被要求,但问题是通过这种方式解决的。

如果有人能够解释这一点,我很乐意听到它

0

转到“桌面”选择“谷歌浏览器”图标和“右键单击”就可以了,然后去它的“属性”

这里属性在这个框中找到标签为“Target”的输入框,chrome的位置如下给出。

“C:\ Program Files文件(x86)的\谷歌\镀铬\应用\的chrome.exe” - 禁用网络安全的user-data-DIR = “C:/ someFolderName”

最后,推出的Chrome刚看到在屏幕上方弹出带有黄色

来源:https://www.thegeekstuff.com/2016/09/disable-same-origin-policy/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+TheGeekStuff+(The+Geek+Stuff)

好运

相关问题