当前位置:  开发笔记 > 编程语言 > 正文

防止重定向Xmlhttprequest

如何解决《防止重定向Xmlhttprequest》经验,为你挑选了4个好方法。

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



1> Boy Baukema..:

不符合XMLHttpRequest对象的W3C标准(强调添加):

如果响应是HTTP重定向:

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

他们正考虑将来发布:

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

禁用以下重定向的属性;

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


什么是荒谬的是透明重定向涉及覆盖原始请求中设置的某些HTTP标头.具体来说,如果"Accept"标头设置为特定的内容类型,则Firefox在遵循重定向时无法包含此标头(这使得开发使用此标头的完全基于REST的Web服务变得更加困难...叽).

2> user..:

新的Fetch API支持不同的重定向处理模式:follow,errormanual,但是当重定向被取消时,我找不到查看新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.



3> Roland Pihla..:

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



4> AnthonyWJone..:

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

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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有