[英]CORS AJAX-request fails even though the correct headers are specified
我试图从托管在Github Pages上的页面(使用https)向不同域(也使用https)上托管的php脚本发送AJAX请求。
这是我在AngularJS控制器中使用的代码(尽管我不认为这是问题所在):
$http.get('//thorin.epizy.com/cors.php?url=Place%2FGetClosestPlacesExtension%3Fcoordinates%3Dx%3D'+Math.round(vm.coords[0])+'%2Cy%3D'+Math.round(vm.coords[1])+'%26proposals%3D12').success(function (data) {
vm.success = true;
console.log('Recieved data from Ruter:',data);
});
在Chrome中打开“ Network
面板时,我看到不存在CORS标头:
但是,当我直接在浏览器中访问页面(将URL键入url字段)并打开“ Network
面板时,会显示所有正确的标题:
我也尝试过从其他域上的页面发送请求,但是我得到了相同的错误并且没有CORS标头。 这对我来说意义不大,我也不知道如何解决。 我真的很感谢您的帮助。
出于一个奇怪的原因, thorin.epizy.com/cors.php
不会发送没有Cookie的CORS标头:
curl -I 'http://thorin.epizy.com/cors.php?[...]' <other headers>
Date: Sun, 04 Dec 2016 16:42:57 GMT
Content-Type: text/html
Content-Length: 920
Connection: keep-alive
Vary: Accept-Encoding
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: no-cache
使用cookie,我们得到正确的标题:
curl -I -H 'Cookie: __test=b142b58439ba4f78e04c32cd1ba0a991' 'http://thorin.epizy.com/cors.php?[...]' <other headers>
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 04 Dec 2016 16:45:04 GMT
Content-Type: application/json;charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Cache-Control: max-age=0
Expires: Sun, 04 Dec 2016 16:45:04 GMT
当您执行跨站点请求并需要Cookie时,您需要使用withCredentials
( withCredentials: true
和angularjs)来请求它们。
然后,服务器将需要更改两件事 :
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
更改为Access-Control-Allow-Origin: your-web-site.com
(通常取自Origin
请求头) 如果您不这样做,则会收到以下消息:
跨域请求被阻止:“同源起源”策略不允许读取位于http://thorin.epizy.com/cors.php?url= [...]的远程资源。 (原因:如果CORS标头“ Access-Control-Allow-Origin”为“ *”,则不支持凭据)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.