AngularJS $http:如何避免重定向跟随

6
在AngularJS应用程序中,我通过$http.post调用服务器url。该URL成功响应是30x重定向,我的问题在于$http.post严格遵循此重定向并在成功回调中返回最终调用的结果。 我想拦截此重定向并手动将用户重定向(更改浏览器URL)到最终页面。是否可以实现?

不是真的。正如我所说,$http.post调用的结果是最终目的地的结果。 - Marco
1个回答

8
根据文档$http服务是一个核心Angular服务,通过浏览器的XMLHttpRequest对象或JSONP方便地与远程HTTP服务器通信。
了解这一点,并了解XMLHttpRequest的规范,可能无法拦截重定向。 XMLHttpRequest的W3C规范说:

如果响应具有301、302、303、307或308的HTTP状态代码

如果重定向违反了无限循环预防措施,则会出现网络错误。

否则,请执行以下步骤:

将请求URL设置为位置标头传达的URL。

如果源起点和请求URL的起点相同,则在遵守同源请求事件规则的同时透明地跟随重定向。

否则,请按照跨源请求步骤进行,并终止此算法的步骤。

HTTP对用户代理有关在重定向期间保留请求方法和请求实体主体的要求,并且还要求最终用户被通知某些类型的自动重定向。

因此,重定向发生得比Angular能够对其进行任何操作更早,而且无法停止。
另一个选择是对自己的服务器进行$http调用,然后使用类似于cURL的服务器端工具(取决于服务器端使用的语言),该工具可以设置为不遵循重定向以获取资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接