浏览器会删除HTTP 302重定向到CORS请求

浏览器会删除HTTP 302重定向到CORS请求,cors,http-redirect,Cors,Http Redirect,我正在从站点a加载一个带有javascript的HTML页面 Javascript向站点B发送HTTP GET请求。此时: 浏览器向站点B发送选项请求 站点B响应选项请求 浏览器然后将原始HTTP GET请求发送到站点B 站点B响应HTTP 302,位置设置为站点C 此时,浏览器停止处理请求。我希望它像向站点B发送请求一样,向站点C发送HTTP选项请求。但它没有。我在Firefox和Chrome上观察到了同样的行为 我想了解为什么浏览器会以这种方式运行。我知道应该有一些检查或最大重定向,以防止循

我正在从站点a加载一个带有javascript的HTML页面

Javascript向站点B发送HTTP GET请求。此时:
浏览器向站点B发送选项请求
站点B响应选项请求
浏览器然后将原始HTTP GET请求发送到站点B
站点B响应HTTP 302,位置设置为站点C

此时,浏览器停止处理请求。我希望它像向站点B发送请求一样,向站点C发送HTTP选项请求。但它没有。我在Firefox和Chrome上观察到了同样的行为

我想了解为什么浏览器会以这种方式运行。我知道应该有一些检查或最大重定向,以防止循环,但不限于2重定向请求

还有为什么不将头信息发送到Javascript代码,以便应用程序可以对其进行处理。虽然它通过在浏览器控制台中显示带有位置URL的站点C的HTTP 302响应来逗弄您,但它只是被浏览器删除

XMLHttpRequest无法加载。。。请求被重定向到“..”,这对于需要飞行前的跨源请求是不允许的

我们衷心感谢您对设计的任何见解


关于

嗯,我和你有同样的问题,不幸的是,这种行为是正常的

本规范描述了浏览器将CORS视为机器状态的行为,如果您跳到步骤3(执行实际请求),它将明确说明:

这是实际的请求。应用“提出请求”步骤并遵守 发出请求时,请求规则如下

如果响应的HTTP状态代码为301、302、303、307或308 应用缓存和网络错误步骤

因此,如果我理解正确,我们不能期望浏览器在CORS情况下自动遵循重定向(假设选项已授予对另一资源的访问权限?但为什么不自动向该资源发送另一个选项请求?)

更糟糕的是,由于上述原因导致自动重定向失败后,浏览器会隐藏响应的标题,因此我们无法访问位置标题来处理对正确资源的后续调用。因此,在这种情况下,无法获取实际资源

我认为这是一个bug,但我在网上找不到任何好的帖子。

如果可能的话,一种解决方法是不执行CORS请求,而是使用一个简单的请求(再次根据规范,例如没有自定义头的简单GET),这不会导致发送任何飞行前请求:在这种情况下,重定向正常工作(由浏览器自动跟随)

否则,您可以查看是否可以调整服务器,使其在出现CORS类型的请求时不响应302,而是使用自定义HTTP代码进行响应,您可以在客户端中标识该代码,以将重定向位置包含在响应内容中,从而让客户端手动跟踪它

如果任何人有任何关于此行为原因的有效信息,请提供您的输入:-)


希望能有所帮助。

我不能保证我的回答是否适用于你的情况

我的客户请求被cosign重定向;因此,我在Access Control Allow Origin中使用了联合签名url。这对我很有用。另外,在客户端AJAX中添加带有凭据的xhrFields

 $.ajax( {url:url, success:function(result){   alert(result.toString()); } 
 ,xhrFields: {withCredentials: true}
并且.NET服务器的SupportsCredentials=true

 [EnableCors(origins: "https://cosign_URL", headers: "*"
    , methods: "get,post", SupportsCredentials = true)]

我也有同样的问题,在这里描述:你能帮我吗?显然规格“刚刚更改”(2016年8月),但可能尚未被浏览器采用:|