Man*_*ena 17 http-redirect cors
我正在加载一个HTML页面,其中包含来自站点A的一些javascript.
Javascript向站点B发送HTTP GET请求.此时:
- 浏览器向站点B发送OPTIONS请求
- 站点B响应OPTIONS请求
- 然后浏览器将原始HTTP GET请求发送到站点B
- 站点B使用位置设置的HTTP 302进行响应到网站C.
此时,浏览器停止处理请求.我期待它将HTTP OPTIONS请求发送到站点C,就像它向站点B发送请求时那样.但事实并非如此.我在Firefox和Chrome上观察到了相同的行为.
我想了解为什么浏览器会以这种方式运行.我知道应该有一些检查或最大重定向来防止循环,但不限制2个重定向请求.
此外,为什么标题信息不会发送到Javascript代码,以便应用程序可以做一些事情.它只是被浏览器删除了,虽然它通过在浏览器控制台中显示来自站点C的HTTP 302响应和位置URL来取笑你.
XMLHttpRequest无法加载https:// siteB / ...请求被重定向到' https:// siteC / ..',这对于需要预检的跨源请求是不允许的.
对设计的任何见解都是真诚的感谢.
问候
Mat*_*don 26
好吧,我遇到了同样的问题,不幸的是,根据W3C规范,这种行为是正常的
此规范描述了浏览器关于CORS作为机器状态的行为,如果跳转到步骤3(执行实际请求),它会明确指出:
这是实际的要求.在发出请求时,应用make a request步骤并遵守下面的请求规则.
如果响应的HTTP状态代码为301,302,303,307或308,则应用缓存和网络错误步骤.
因此,如果我理解正确,我们不能指望浏览器在CORS的情况下自动遵循重定向(据推测,因为OPTION已授予对另一个资源的访问权限?但是为什么不自动向该资源发送另一个OPTION请求?) .
更糟糕的是,由于上述原因导致自动重定向失败后浏览器隐藏了响应的HEADERS,因此我们无法访问Location标头来处理随后对正确资源的调用.因此在这种情况下无法获取实际资源.
我认为这是一个错误,但我在网上找不到关于这个主题的任何好帖子.
如果可能的话,一种解决方法是不执行CORS请求,而是使用简单的请求(根据规范再次,例如没有自定义标头的简单GET),这不会导致任何预检请求被发送:在这种情况下,重定向正常工作(浏览器自动跟随).
否则,您可以看到是否可以调整服务器以便在发出CORS类型的请求时不响应302,而是使用您可以在客户端中识别的自定义HTTP代码进行响应,以将重定向位置包含在内容中.让您的客户手动关注它.
如果有人有任何有关此行为的有效信息,请提供您的意见:-)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
14047 次 |
| 最近记录: |