CORS“不存在'Access-Control-Allow-Origin'标头”但有
Posted
技术标签:
【中文标题】CORS“不存在\'Access-Control-Allow-Origin\'标头”但有【英文标题】:CORS "No 'Access-Control-Allow-Origin' header is present" yet there isCORS“不存在'Access-Control-Allow-Origin'标头”但有 【发布时间】:2014-08-20 11:43:06 【问题描述】:这三个标头是用php添加的
header('Content-Type: application/json; charset=UTF-8;');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Origin: *');
所有发送的标头是:
HTTP/1.1 200 OK
Date: Mon, 30 Jun 2014 06:39:29 GMT
Server: Apache
X-Powered-By: PHP/5.3.28
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Origin: *
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Cache-Control: max-age=1, private, must-revalidate
Content-Length: 20
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8;
然而,当尝试使用 $.json 或 $.post 来定位此服务器时,我在 Chrome 控制台中收到此错误:
XMLHttpRequest cannot load http://cms.webdevguru.co.uk/gurucms.php?mode=addto&apikey=606717496665bcba. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://remote.webdevguru.co.uk' is therefore not allowed access.
我知道这可能与其他几个问题重复,但由于我已经处理了其中的许多问题并尝试了其中的一些方法来尝试解决这个问题:我将不胜感激一些具体的答复来处理我的问题就在眼前。
正如 Joachim Isaksson 发现的那样,由于初始标头包含 301 重定向,有没有办法在检查 Access-Control-Allow-Origin 标头之前强制请求遵循重定向?
【问题讨论】:
我使用该链接得到了一个301 Moved Permanently
,没有 CORS 标头。它重定向到的链接发送标头。
没想到用完整链接,谢谢secure27.qnop.net/~t3chguy/cms/gurucms.php我现在试试
我有点预计它会遵循 301,然后阅读这些标题:/ 有什么办法让它这样做吗?
添加了上述作为答案,并添加了可能的解决方法。
【参考方案1】:
CORS 不起作用的原因是您的链接给出了“301 Moved Permanently”,没有 CORS 标头,重定向到另一个链接。
它重定向到的链接发送标头,但是似乎 CORS 已经放弃了对第一个响应的预检。
使用 301 回传“Access-Control-Allow-Origin”标头可能会解决您的问题,这应该允许预检继续进行。
【讨论】:
以上是关于CORS“不存在'Access-Control-Allow-Origin'标头”但有的主要内容,如果未能解决你的问题,请参考以下文章
CORS - 从 Postman 伪造 CORS 预检无法返回标头
AspNet.Cors 和 AspNet.WebApi.Cors 有啥区别?
Wagtail、CORS 和 Django-Cors-Headers。如何启用 CORS 以便 AXIOS 可以访问端点