我正在尝试使用以下代码从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://
XMLHttpRequest无法加载https://s3.amazonaws.com//document.json。没有"访问-控制-允许-起源"标头出现在请求上资源。来源"https://localhost.office.lucidpress.com"是因此不允许访问。
使用CURL发出相同的请求确实有以下头:"Access-Control-Allow-Origin: *"。
为什么这在Chrome上不起作用,有什么解决办法吗?
注意:我在url中添加了空格,以防止它们成为链接
Chrome将发送一个飞行前选项请求,看看是否可以执行GET。如果你是curl -X OPTIONS -i https://s3.amazonaws.com/<bucket-name>/<pub-id>/document.json
,你会收到什么头?你很可能需要添加Access-Control-Allow-Headers
到你的服务器响应,也允许任何额外的标题Chrome可能发送的选项请求,即Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
或者,因为这是一个https请求,你的答案可能是为什么Chrome取消CORS选项请求