Chrome:针对CORS HTTPS请求取消了GET请求

时间:2014-07-01 17:42:01

标签: ajax json google-chrome amazon-s3 cors

我正在尝试使用以下代码发出一个从S3下载JSON文件的AJAX请求:

$.ajax({
    'type':'GET',
    'url':this.baseUrl + publicationId + "/document.json",
    'crossDomain': true,
    'dataType':'json',
    'success':function(data) {
        console.log('got document.json');
    }
});

这在Firefox中运行良好,如果baseUrl是http://< s3-url&gt ;,它可以正常工作,但如果它是https://,则Chrome会取消请求并显示错误:

  

XMLHttpRequest无法加载   https://s3.amazonaws.com/< bucket-name&gt; /&lt; pub-id&gt; /document.json。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。 Origin'https://localhost.office.lucidpress.com'是   因此不允许访问。

使用CURL发出相同的请求确实有以下标题:“Access-Control-Allow-Origin:*”。

为什么这不适用于Chrome,是否有解决方法?

注意:我在URL中放置空格以防止它们成为链接。

1 个答案:

答案 0 :(得分:1)

Chrome会发送一个飞行前OPTIONS请求,以查看是否可以执行GET。如果curl -X OPTIONS -i https://s3.amazonaws.com/<bucket-name>/<pub-id>/document.json,您会收到哪些标题?您很可能需要在服务器响应中添加Access-Control-Allow-Headers,以便允许Chrome在OPTIONS请求中发送任何额外标头,即Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept

或者,由于这是https请求,您的答案可能是Why Chrome cancel CORS OPTION request