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

Posted

技术标签:

【中文标题】Chrome:CORS HTTPS 请求的 GET 请求已取消【英文标题】:Chrome: GET request cancelled for CORS HTTPS request 【发布时间】:2014-08-22 08:52:18 【问题描述】:

我正在尝试使用以下代码发出 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:// 也可以,但如果是 https://,则 Chrome 会取消请求并显示错误:

XMLHttpRequest 无法加载 https://s3.amazonaws.com///document.json。不 请求中存在“Access-Control-Allow-Origin”标头 资源。来源“https://localhost.office.lucidpress.com”是 因此不允许访问。

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

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

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

【问题讨论】:

【参考方案1】:

Chrome 会发送一个 pre-flight 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

【讨论】:

看起来可能就是这样。 S3 正在为 OPTIONS 请求提供 403。

以上是关于Chrome:CORS HTTPS 请求的 GET 请求已取消的主要内容,如果未能解决你的问题,请参考以下文章

仅当有标头时,Chrome 中的 CORS 请求才会失败

为啥 Chrome 会取消 CORS OPTION 请求

Chrome 插件无法禁用 CORS 限制,或者我的请求有问题

FireFox 不发送 CORS 请求(使用 jQuery)

禁用缓存后,Chrome CORS 请求会更快吗?

带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域