CORS请求在Safari中不起作用

Pat*_*ick 48 javascript safari xmlhttprequest cors

我正在提出CORS xhr请求.这在chrome中运行良好,但是当我在safari中运行时,我得到一个'无法加载---- Access-control-allow-origin不允许访问'.代码完全相同,我在服务器上设置了CORS.下面是我的代码.(有访问控制,但你可以免费试用没有accessToken)

 var water;
 var req = new XMLHttpRequest;
 req.overrideMimeType("application/json");
 req.open('GET', 'https://storage.googleapis.com/fflog/135172watersupplies_json', true);
 req.setRequestHeader('Authorization', 'Bearer ' + accessToken);
 origThis = this;
 var target = this;
 req.onload = function() {
 water = req;

 req.send(null);
Run Code Online (Sandbox Code Playgroud)

查看请求标头后,我看到首先发出OPTIONS请求,这是不允许的请求.原始标头不包含在Safari中的响应中,但是在chrome中.什么会导致这种情况.任何帮助将不胜感激.

更新:我已经尝试在Safari for Windows中运行,所以我不确定这里发生了什么.我使用的mac是远程访问(Macincloud.com),但我不认为这与它有任何关系.

Set*_*eth 45

在针对Amazon S3中的文件发出XHR请求时遇到了同样的错误.在Safari 7上它失败了.我知道你没有使用亚马逊S3,但我想我会发布以防这个解决方案帮助其他人.

问题是Safari 7将Access-Control-Request-Headers标头设置为"origin,x-requested-with",但我的AWS CORS配置只允许"x-requested-with":

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
        <AllowedHeader>x-requested-with</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

我添加了"origin"作为允许的标题,一切正常.

        <AllowedHeader>origin</AllowedHeader>
Run Code Online (Sandbox Code Playgroud)

注意:AllowedOrigin *仅用于开发目的.有关详细信息,请参阅下面的@andes评论.

  • 如果您正在关注此示例,请注意使用*for AllowedOrigin实际上是针对开发环境的 - 对于大多数用例,您应该在生产中使用白名单.以下是实施白名单的示例:https://github.com/monsur/CORSinAction/blob/master/ch07/listing-7.1/app.js (6认同)

Wil*_*ald 8

我只是有一个类似的问题,CORS错误。它可以在Firefox和Chrome中运行,但不能在Safari 10中运行。

原来,我们需要在JSON URL上加上斜杠。

  • 什么 JSON URL 上有什么尾部斜杠?XHR 请求失败?一些允许来源标头?请详细说明。 (5认同)

Pat*_*ick -5

感谢所有的回复,我终于自己得到了这个。我将“Origin”添加到我的responseHeaders 中,现在工作正常。

  • 您能否详细说明一下响应情况。 (46认同)
  • 哪种类型的标题?以及把它放在哪里?您能用代码添加确切的步骤吗? (4认同)