是否可以阻止浏览器在发送 XMLHttpRequest-s 时遵循重定向(即获取重定向状态代码并自己处理)?

有帮助吗?

解决方案

不根据 XMLHttpRequest 对象的 W3C 标准 (强调):

如果响应是 HTTP 重定向:

如果位置标头传达的URL的起源与XMLHTTPREQUEST的起源相同,并且重定向不违反无限环路预防措施,则 透明地跟随重定向 同时观察相同的原始请求事件规则。

他们是 考虑到 供未来版本使用:

此规范不包括以下功能,这些功能正在考虑此规范的未来版本:

  • 禁用以下重定向的属性;

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

其他提示

新的 Fetch API 支持不同的重定向处理模式:关注错误 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();

您将无法获取状态代码,但会在不从中下载整个网页的情况下找到新网址。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top