【发布时间】:2013-09-15 06:29:05
【问题描述】:
我有一个反向代理来检查多个应用程序的全局身份验证。当用户断开连接但仍在尝试使用我的应用程序时,代理会发送 302 响应:
HTTP/1.1 302 Found
Date: Wed, 11 Sep 2013 09:05:34 GMT
Cache-Control: no-store
Location: https://other.url.com/globalLoginPage.html
Content-Length: 561
Content-Type: text/html; charset=iso-8859-1
Via: 1.1 my-proxy.com
Connection: Keep-Alive
在 angularJs 中,错误回调被调用,但响应头为空,状态为 0,数据为空字符串。所以看起来我真的无能为力来处理响应......
我已经看到了有关该主题的几个问题,但我仍然不明白发生了什么(CORS 因为代理或该位置的不同域?,302 浏览器行为?)。
特别是答案中的这一部分(https://stackoverflow.com/a/17903447/1093925):
注意:如果您的服务器设置的响应代码为 301 或 302,您将无法获取 Location 标头,因为 XMLHttpRequest 对象将自动透明地跟随它。
这个 XMLHttpRequest 对象呢?
在非常旧的 Chrome 版本(不能使用较新版本)中,我可以在网络面板中看到相应的请求,但由于没有响应,它似乎失败了。
在最新版本的 Firefox 中,没有发生任何事情。
由于无法更改代理配置和响应,我可以对此做些什么吗?
更新:
我今天重播了我的场景,并且感谢更新版本的萤火虫,我能够获得有关正在发生的事情的更多详细信息。
我离问题的答案不远:跨域策略。
由于它是我的应用程序发出的 HTTP 请求,因此浏览器拒绝以下 XMLHttpRequest(应用内看起来像相同的请求)。因此出现错误和空响应。
所以我觉得没什么特别的了
【问题讨论】:
-
有谁知道如何从 302 获取 AngularJS 中的
Location标头?它在浏览器中公开,但是在检查错误响应(配置、标头、数据等)时,它似乎不存在于 Angular 应用程序中……我需要将我的用户重定向到位置标题
标签: angularjs http-status-code-302