返回重定向作为对XHR请求的响应


Answers:


216

如果浏览器收到对ajax请求的重定向响应,该怎么办?

如果服务器发送了重定向(又名302响应加上Location:标头),则浏览器将自动跟随重定向。对第二个请求的响应(假设它也不是另一个重定向)是程序所暴露的。

实际上,您没有能力检测是否已发生302响应。如果302重定向导致200,则您的程序的行为就如同原始请求直接导致200。

这既是我的经验,也是规范中提到行为

2016年更新:时间已经过去,而且好消息是,新的fetch()API经过专门设计,可以对重定向的处理方式进行更细粒度的控制,其默认行为类似于XHR。也就是说,它仅在本地实现fetch()的地方起作用。基于XHR的 polyfill 版本的fetch()仍然具有XHR的局限性。幸运的是,本机浏览器支持似乎很好。


47
有趣的是,我之所以来到这里,是因为我遇到了一个明显没有遵循重定向的情况……当重定向违反了相同的源策略时,就会发生这种情况。
Gus

4
@Gus,这可能是合乎逻辑的
Dmitry

1
在重定向到401的情况下(或任何4xx或5xx错误),我假设您的程序的行为就像请求直接导致了401。这不是您所看到的吗?
greim

2
RESTful API可以在POST请求后发送201和Location标头;请参阅restapitutorial.com/lessons/httpmethods.html

1
2019年更新:提取功能不像我们期望的3年前):
lcjury

7

ajax-request将跟踪该重定向AFAIK。实际内容(.responseText.responseXML)将是您重定向到的页面中的内容。

你也许能够拦截重定向(status-codelocation-header上)readyState2或3,但不知道这件事。


不,所有这些州都具有完全相同的状态。即使的值getAllResponseHeaders()也相等。
sebastianwagner 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.