防止Xmlhttprequest重定向
在发送XMLHttpRequest-s(即重新获取重定向状态代码并自己处理它)时,是否有可能阻止浏览器遵循重定向?
不符合XMLHttpRequest对象的W3C标准(重点添加):
如果响应是HTTP重定向:
如果由Location标头传送的URL的起源与XMLHttpRequest起源相同,并且重定向不违反无限循环预防措施, 则在观察同源请求事件规则时透明地遵循重定向 。
他们正在考虑将来的版本:
本规范不包括以下本规范未来版本正在考虑的功能:
但最新的规范不再提到这一点。
新的Fetch API支持不同的重定向处理模式: follow
, error
和manual
,但是我找不到在重定向被取消时查看新URL或状态码的方法。 你可以停止重定向本身,然后它看起来像一个错误(空响应)。 如果这就是你所需要的,那么你很好。 你也应该知道,通过这个API所做的请求还不能被取消。 他们现在。
至于XMLHttpRequest,你可以通过HEAD
服务器来检查URL是否已经改变:
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
你不会得到状态码,但会找到新的URL而不从中下载整个页面。
您可以使用responseURL
属性来获取重定向目标,或者检查响应是否最终从您接受的位置获取。
这当然意味着无论如何都会获取结果,但至少您可以获得有关重定向目标的必要信息,例如在您想放弃响应时检测条件。