是否可以阻止浏览器在发送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
property来获取重定向目标,或检查响应是否最终从您接受的位置获取.
这当然意味着无论如何都会获取结果,但至少您可以获得有关重定向目标的必要信息,例如,当您想要放弃响应时检测条件.
不,您在XMLHttpRequest公开的API中没有任何地方允许您覆盖其自动跟随301或302的默认行为.
如果客户端在Windows上运行IE,那么您可以使用WinHTTP来设置一个选项以防止该行为,但这是一个非常有限的解决方案.