CORS“不存在‘Access-Control-Allow-Origin’标头”但有

t3c*_*guy 6 javascript php jquery xmlhttprequest cors

这三个标题是使用PHP添加的

    header('Content-Type: application/json; charset=UTF-8;');
    header('Access-Control-Allow-Methods: GET, POST');
    header('Access-Control-Allow-Origin: *');
Run Code Online (Sandbox Code Playgroud)

发送的所有标头是:

    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;
Run Code Online (Sandbox Code Playgroud)

然而,当尝试使用 $.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.
Run Code Online (Sandbox Code Playgroud)

我知道这可能与其他一些问题重复,但由于我已经解决了其中的许多问题并尝试了一些方法来尝试解决此问题:我希望能得到一些具体的答复来解决我手头的问题。

正如 Joachim Isaksson 发现的那样,因为初始标头包含 301 重定向,在检查 Access-Control-Allow-Origin 标头之前,是否有任何方法可以强制请求遵循重定向?

Joa*_*son 6

CORS 不起作用的原因是您的链接给出了“301 Moved Permanently”而没有 CORS 标头,重定向到另一个链接。

它重定向到的链接发送标头,但似乎 CORS 已经放弃了第一个响应的预检。

将带有 301 的“Access-Control-Allow-Origin”标头传回可能会解决您的问题,这应该允许预检继续。