在AngularJS应用程序中,我对服务器URL进行$ http.post调用。这个url的成功响应是30x Redirect,我的问题是$ http.post严格遵循此重定向并在成功回调中返回最终调用的结果。 我想拦截此重定向并手动将用户(更改浏览器URL)重定向到最终页面。可能吗?
答案 0 :(得分:8)
根据docs,$http
服务是一项核心Angular服务,可通过浏览器的XMLHttpRequest对象或JSONP促进与远程HTTP服务器的通信。
了解并了解XMLHttpRequest的规范后,可能无法拦截重定向。
如果响应的HTTP状态代码为301,302,303,307或308
如果重定向违反了无限循环预防措施,则这是一个网络 错误。
否则,请执行以下步骤:
将请求URL设置为Location头传达的URL。
如果源的来源和请求URL的来源是同一个来源 在观察同源时透明地遵循重定向 请求事件规则。
否则,请按照跨源请求步骤终止 这个算法的步骤。
HTTP对用户代理提出有关保留的要求 在重定向期间请求方法和请求实体主体,和 还要求最终用户收到某些类型的自动通知 重定向。
因此,在Angular可以对其做任何事情之前很久就会发生重定向,并且它无法停止。
另一种选择是对您自己的服务器进行$http
调用,然后使用类似cURL服务器端(取决于服务器端使用的语言),可以将其设置为不遵循重定向,以获取资源