阻止 Xmlhttprequest 的重定向

2022-08-30 04:51:23

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


答案 1

不符合 XMLHttpRequest 对象的 W3C 标准(着重号是后加的):

如果响应是 HTTP 重定向:

如果 Location 标头传达的 URL 的源与 XMLHttpRequest 源同源,并且重定向不违反无限循环预防措施,则在遵守同源请求事件规则的同时透明地遵循重定向

他们正在考虑将来发布它:

本规范不包括在此规范的未来版本中考虑的以下功能:

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

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


答案 2

新的 Fetch API 支持不同的重定向处理模式:、 、 和 ,但我找不到在重定向被取消时查看新 URL 或状态代码的方法。您只需停止重定向本身,然后它看起来像一个错误(空响应)。如果这就是你所需要的,你就可以走了。此外,您应该知道,通过此API发出的请求不可取消。他们现在是。followerrormanual

至于XMLHttpRequest,你可以在服务器和检查URL是否已经改变:HEAD

var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
    if (this.readyState === this.DONE) {
        console.log(this.responseURL);
    }
};
http.send();

您不会获得状态代码,但会找到新的URL,而无需从中下载整个页面。