小编flo*_*pin的帖子

在302重定向后,Safari失败了CORS请求

我对Safari处理CORS请求的方式有疑问.考虑以下场景:

  1. DomainA托管一个页面,该页面向DomainB发出XHR请求(原始标头设置为DomainA)
  2. DomainB返回302重定向做DomainC(原始标头设置为null,这似乎与RFC一样)
  3. DomainC返回200响应的实际内容

这适用于Chrome,FF,但它在Safari上失败(在Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_5)AppleWebKit/600.8.9(KHTML,如Gecko)版本/ 8.0.8 Safari/600.8.9上测试).

当我在没有打开xhr.withCredentials的情况下发出请求时,首先,Safari会在向DomainC提出实际请求之前发出OPTIONS预检请求,因为所有请求都是简单请求,但我可以处理这个请求.问题是Safari在对DomainC的预检请求说"无法从null发出任何请求"后失败.我可以通过将Access-Control-Allow-Origin设置为*并删除Access-Control-Allow-Credentials标头(这些是互斥的)来绕过这一点,这将使这种情况起作用.但是我仍然认为这不是正确的行为.

现在,事情是我需要传递凭据(并且不,我不能以其他方式传递它,因为它依赖于某些第三方服务器).那么,让我们来吧

xhr.withCredentials

为true,我们回到"无法从null发出任何请求",现在甚至通配符访问控制允许凭证也无济于事.

我认为所有CORS标头都设置正确,但请随时查看我.测试示例可以在这里找到:http://a.ihatesafari.com

这里发生了什么?这是一个错误还是我错过了什么?

谢谢你的回答

javascript safari ajax cors http-status-code-302

8
推荐指数
1
解决办法
2164
查看次数

标签 统计

ajax ×1

cors ×1

http-status-code-302 ×1

javascript ×1

safari ×1