我有一个反向代理,检查几个应用程序的全局身份验证.当用户断开连接但仍尝试使用我的应用程序时,代理会发送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
Run Code Online (Sandbox Code Playgroud)
在angularJs中,调用错误回调,但响应头为空,状态为0,数据为空字符串.所以似乎我真的无法处理响应...
我已经看到了关于这个主题的几个问题,我仍然不明白发生了什么(CORS因为代理或不同的域名location?,302浏览器行为?).
特别是这部分来自答案(/sf/answers/1253241321/):
注意:如果您的服务器设置响应代码301或302,您将无法获取Location标头,因为XMLHttpRequest对象将自动且透明地跟随它.
这个XMLHttpRequest对象怎么样?
在一个非常旧版本的Chrome(不能使用更新的版本)中,我可以在网络面板中看到相应的请求,但由于没有响应,它似乎失败了.
在最新版本的Firefox中,没有任何进展.
我可以做任何事情,因为我无法更改代理配置和响应吗?
更新:
我今天重播了我的场景,并且由于更新版本的firebug,我能够获得有关正在发生的事情的更多细节.
在我的问题中,我离anwser不远:跨域策略.
由于它是我的应用程序发出的HTTP请求,因此浏览器拒绝以下XMLHttpRequest(该应用程序看起来像是同一个请求).因此错误和空响应.
所以我认为我无能为力
我需要从我公司持有的另一个域中提取一些资源.我想用GET请求提取安全的HTML内容.
当用户退出应用程序时,所请求的内容将返回302到登录页面.
我试图嗅探302的标题并没有返回到目前为止我所希望的.我的Observable返回的响应是200(登录页面).
这是我的示例应用程序.
export class MenuComponent implements OnInit {
private _resourceUrl = "http://localhost:3001/resources/menu";
constructor(private _http: Http){
}
menu: string;
ngOnInit(): void {
this.getMenu()
.subscribe(
response => {
console.log(`Response status: ${response.status}`);
this.menu = response.text();
},
error => console.log(<any>error));
}
getMenu(): Observable<Response>{
return this._http.get(this._resourceUrl)
.map((response: Response) => response)
.catch(this.handleError);
}
private handleError(error: Response){
console.log(error);
return Observable.throw(error.json().error || 'Server Error');
}
}
Run Code Online (Sandbox Code Playgroud)
我是否走在正确的轨道上?