Chrome: CORS HTTPS请求的GET请求被取消

3

我正在尝试使用以下代码通过AJAX请求从S3下载JSON文件:

$.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>的情况下也可以正常工作,但如果是https://,那么Chrome会取消请求并显示以下错误:

XMLHttpRequest无法加载 https ://s3.amazonaws.com/<bucket-name>/<pub-id>/document.json。所请求的资源上不存在“Access-Control-Allow-Origin”头。因此不允许来自"https ://localhost.office.lucidpress.com"的访问。

使用CURL进行相同的请求会有以下标头:“Access-Control-Allow-Origin:*”。

为什么这对Chrome不起作用,是否有任何解决方法?

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

1个回答

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请求,您的答案可能是为什么Chrome取消CORS OPTION请求

那看起来可能就是了。S3在OPTIONS请求中返回403错误。 - Thayne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接