在 AngularJS 应用程序中,我对服务器 URL 进行 $http.post 调用。这个url的成功响应是30x重定向,我的问题是$http.post严格遵循这个重定向并在成功回调中返回最终调用的结果。
我想拦截此重定向并手动将用户重定向(更改浏览器网址)到最终页面。有可能吗?
根据docs, the $http
service 是 Angular 的核心服务,它有助于通过浏览器的 XMLHttpRequest 对象或 JSONP 与远程 HTTP 服务器进行通信。
知道这一点并了解 XMLHttpRequest 的规范,就不可能拦截重定向。
The XMLHttpRequest 的 W3C 规范 says
如果响应的 HTTP 状态代码为 301、302、303、307 或 308
如果重定向违反了无限循环预防措施,则这是一个网络
错误。
否则,请运行以下步骤:
将请求 URL 设置为 Location 标头传达的 URL。
如果源origin和请求URL的origin同源
透明地遵循重定向,同时观察同源
请求事件规则。
否则,按照跨域请求步骤并终止
该算法的步骤。
HTTP 对用户代理提出了有关保存的要求
重定向期间的请求方法和请求实体主体,以及
还要求最终用户收到某些类型的自动通知
重定向。
因此,重定向早在 Angular 能够采取任何行动之前就发生了,而且无法停止。
另一种选择是做$http
调用您自己的服务器,然后使用 cURL 服务器端(取决于服务器端使用的语言)之类的东西(可以设置为不遵循重定向)来获取资源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)