繁体   English   中英

即使指定了正确的标头,CORS AJAX请求也会失败

[英]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);
});

请求失败,并在控制台中显示此错误: XMLHttpRequest无法加载https://thorin.epizy.com/cors.php?url=Place%2FGetClosestPlacesExtension%3Fcoordinates%3Dx%3D600593%2Cy%3D6646876%26proposals%3D12。所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ https://tjespe.github.io”。

在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时,您需要使用withCredentialswithCredentials: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM