admin 管理员组文章数量: 887021
php ci cors,javascript
javascript-CORS请求在Safari中不起作用
我正在提出CORS xhr请求。 这在chrome中工作正常,但是当我在野生动物园中运行时,出现“无法加载---- Access-control-allow-origin不允许的访问”。 代码完全相同,我已经在服务器上设置了CORS。 以下是我的代码。(具有访问控制,但是如果没有accessToken,您可以自由尝试)
var water;
var req = new XMLHttpRequest;
req.overrideMimeType("application/json");
req.open('GET', '', true);
req.setRequestHeader('Authorization', 'Bearer ' + accessToken);
origThis = this;
var target = this;
req.onload = function() {
water = req;
req.send(null);
查看请求标头后,我看到首先发出了OPTIONS请求,这是不允许的请求。 原始标头未包含在Safari的响应中,但位于chrome中。 是什么原因造成的。 任何帮助将不胜感激。
更新:我已经在Windows的Safari浏览器中进行了尝试,并且可以正常运行,所以我不确定这里发生了什么。 我使用的Mac是远程访问(Macincloud.com),但我认为这与它无关。
10个解决方案
45 votes
对Amazon S3中的文件发出XHR请求时遇到了相同的错误。 在Safari 7上失败了。 我知道您没有使用Amazon S3,但我想我会发布以防此解决方案对其他人有所帮助。
问题是Safari 7将Access-Control-Request-Headers标头设置为“原始的x请求的”,但是我的AWS CORS配置仅允许“ x请求的”:
*
GET
3000
Authorization
x-requested-with
我添加了“ origin”作为允许的标题,并且一切正常。
origin
注意:*的AllowedOrigin仅用于开发目的。 有关更多信息,请参见下面的@andes评论。
Seth answered 2020-02-21T15:59:34Z
8 votes
我只是有一个类似的问题,CORS错误。 它可以在Firefox和Chrome中运行,但不能在Safari 10中运行。
原来,我们需要在JSON URL上加上斜杠。
William Macdonald answered 2020-02-21T15:59:58Z
1 votes
就我而言,这是Accept-Langauge标头的问题。 我在Access-Control-Allow-Headers中添加了Accept-Language,此问题已解决。
deen answered 2020-02-21T16:00:18Z
0 votes
对于CORS请求,您应该使用起源fflog.storage.googleapis.com。如果您使用常见的overrideMimeType起源,则任何站点都可以访问您的存储桶。
有尝试尝试删除overrideMimeType吗? 如果设置了mime类型,它将正确返回。
我也对Safari POST请求有问题,但还没有答案。 GET确定。
Kyaw Tun answered 2020-02-21T16:00:48Z
0 votes
尝试删除替代mime类型。
var
jsonhandler=function(){var req=JSON.parse(this.response);console.log(req)},
req=new XMLHttpRequest;
req.open('GET','');
req.setRequestHeader('Authorization','Bearer '+accessToken);
req.οnlοad=jsonhandler;
req.send();
cocco answered 2020-02-21T16:01:07Z
0 votes
当我查询您的URL时,我将获得以下访问控制标头:
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Authorization, Cache-Control, Content-Length, Date, Expires, Server, Transfer-Encoding, x-goog-meta-foo1
我怀疑这与您的Access-Control标头有关-是您遗漏了某些内容,还是过于具体。
鉴于您实际上正在发送自定义标头,因此您可能需要尝试:
Access-Control-Allow-Headers: *
您还会看到遗漏Access-Control-Expose-Headers是否有所作为。
除此之外,查看实际的请求/响应标头实际上也将有所帮助。
Luke answered 2020-02-21T16:01:46Z
0 votes
当我尝试
curl -v -X OPTIONS \
-H 'Origin: fflog.storage.googleapis.com' \
-H 'Access-Control-Request-Method: GET' \
除了其他标题,我得到了:
Access-Control-Allow-Origin: *
当我在Mac OS 10.8.3上针对Safari 6.0.4的Access-Control-Allow-Origin执行AJAX请求时,出现403错误,但它们全部执行。
因此,我只能猜测您正在尝试发送带通配符Access-Control-Allow-Origin的凭据请求。
Old Pro answered 2020-02-21T16:02:19Z
0 votes
感谢所有答复,我终于自己得到了。 我在responseHeaders中添加了“ Origin”,现在可以正常工作了。
Patrick answered 2020-02-21T16:02:39Z
0 votes
至于Amazon S3,它仅在我添加了更多允许的标头Content-Type和Range后才能在Safari中使用。 其中之一完成了工作。
*
GET
POST
3000
Authorization
Origin
X-Requested-With
Content-Type
Range
Edhowler answered 2020-02-21T16:02:59Z
0 votes
我在CORS在Chrome中工作时遇到了同样的问题,但是在Safari中抛出了原点错误。 原来这是一个Kerberos授权问题。 当我直接在Safari中加载XHR URL时,系统会提示我输入凭据。 输入它们后,我返回了原始站点,Safari不再出现CORS错误。
Seth Moore answered 2020-02-21T16:03:20Z
本文标签: php ci cors javascript
版权声明:本文标题:php ci cors,javascript 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687632108h122975.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论