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

Ajax 返回重定向作为对XHR请求的响应,ajax,http,Ajax,Http,如果浏览器接收到对ajax请求的重定向响应,会发生什么情况?ajax请求将遵循重定向afaik。实际内容(.responseText,.responseXML)将是重定向到的页面中的内容 您可能能够在readyState2或3上截获重定向(status code,location header),但不能确定。如果浏览器收到对ajax请求的重定向响应,会发生什么 如果服务器发送重定向(即302响应加上Location:header),则浏览器会自动跟随重定向。对第二个请求的响应(假设它也不是另一个

如果浏览器接收到对ajax请求的重定向响应,会发生什么情况?

ajax请求将遵循重定向afaik。实际内容(
.responseText
.responseXML
)将是重定向到的页面中的内容

您可能能够在
readyState
2或3上截获重定向(
status code
location header
),但不能确定。如果浏览器收到对ajax请求的重定向响应,会发生什么

如果服务器发送重定向(即302响应加上Location:header),则浏览器会自动跟随重定向。对第二个请求的响应(假设它也不是另一个重定向)是向程序公开的

事实上,您无法检测是否发生了302响应。如果302重定向指向200,那么您的程序的行为与原始请求直接指向200的行为相同

这是我的经验和教训


2016更新:时间已经过去,好消息是新规范将提供,默认行为类似于XHR。也就是说,它只在fetch()本机实现的情况下工作-它们基于XHR-。幸运的是,它看起来很完美。

TLDR:fetch

这里有更多信息:

有趣的是,我之所以这样做是因为我遇到了一个明显没有遵循重定向的情况。。。当重定向违反同源策略时会发生这种情况。@Gus这可能是逻辑上的。在重定向到401(或任何4xx或5xx错误)的情况下,我假设您的程序的行为就像请求直接指向401一样。这不是您看到的吗?RESTful API可能会在POST请求后发送201和位置头;参见2019年更新:fetch不像我们3年前预期的那样工作):不,所有这些州都有完全相同的状态。甚至
getAllResponseHeaders()
的值也是相等的。相关: