即使使用Access-Control-Allow-Origin标头,XMLHttpRequest CORS请求也会失败

时间:2014-09-25 18:07:45

标签: nginx xmlhttprequest cors

我在制作跨站点ajax调用时遇到问题。使用nginx,我相信我已经在服务器配置中添加了正确的标头,但它仍然无法在我的JS代码或控制台中使用。我不知道我做错了什么。

以下是我在控制台中键入的内容,响应是熟悉的" No' Access-Control-Allow-Origin'标题存在"错误:

$.get("//www.example.com");
Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
XMLHttpRequest cannot load http://www.example.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://dictionary.aherriot.com' is therefore not allowed access. 

当我查看初始网页加载的响应标头时,我看到以下标题:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-Requested-With,Accept,Content-Type, Origin
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin:*

以下是该网站的nginx配置文件:

server {
    listen 80;

    root /home/aherriot/sites/dictionary;
    index index.html index.htm;

    server_name dictionary.aherriot.com;

    location / {

            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
            add_header 'Access-Control-Allow-Headers' 'X-Requested-With,Accept,Content-Type, Origin';

    }
}

我很难过我所缺少的东西。还有什么我需要做的才能允许CORS?谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用*接受所有来源,但会阻止使用'Access-Control-Allow-Credentials: true'

请点击此处查看更多示例 - http://enable-cors.org/server_nginx.html

答案 1 :(得分:0)

问题的问题在于对CORS的基本误解。原始服务器不能指定页面可以通过XMLHttpRequest请求访问哪些第三方域,而是指定外部域上的服务器指定哪些域可以连接到它。