防止Xmlhttprequestredirect

当发送XMLHttpRequest-s(即获取redirect状态码并自己处理它)时,是否有可能阻止浏览器跟随redirect?

不符合XMLHttpRequest对象的W3C标准 (重点添加):

如果响应是HTTPredirect:

如果Location头传送的URL的起源与XMLHttpRequest起源相同,并且redirect不违反无限循环注意事项, 在观察同源请求事件规则时透明地遵循redirect

他们正在考虑将来的版本:

本规范不包括以下为本规范未来版本考虑的function:

  • 属性禁用以下redirect;

但最新的规范不再提到这一点。

新的Fetch API支持不同的redirect处理模式: followerrormanual ,但是我找不到在redirect被取消时查看新URL或状态码的方法。 你可以停止redirect本身,然后看起来像一个错误(空响应)。 如果这就是你所需要的,那么你很好。 你也应该知道,通过这个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(); 

你不会得到状态码,但会find新的URL,而不从中下载整个页面。

不,你没有在XMLHttpRequest暴露的API中的任何地方,允许你覆盖其自动跟随301或302的默认行为。

如果客户端在Windows上运行IE,那么你可以使用WinHTTP来设置一个选项来防止这种行为,但这是一个非常有限的解决scheme。

您可以使用responseURL属性来获取redirect目标,或者检查响应是否最终从您接受的位置获取。
这当然意味着无论如何都会得到结果,但至less可以获得有关redirect目标的必要信息,例如,当您想要放弃响应时检测条件。