从角度 4.3+ 中的 302(重定向)响应中检索标头

Posted

技术标签:

【中文标题】从角度 4.3+ 中的 302(重定向)响应中检索标头【英文标题】:Retrieving Headers from 302 (redirect) response in angular 4.3+ 【发布时间】:2018-08-13 23:47:45 【问题描述】:

对于 SPA 应用,您显然需要在使用 JWT 时使用隐式授权。这很好,但是,我可以检索此 JWT 的唯一方法是使用包含特定信息(客户端 ID、令牌类型等)的有效负载或 url 参数发出 POST 或 GET 请求。端点(成功时)响应 302 状态和 Location 标头,其中包含我发出 API 请求所需的访问令牌。

从我目前看到的情况来看,Angular 中似乎没有办法拦截 302 重定向。我尝试过创建自己的拦截器服务(我得到的最接近的是页面重定向后的 200 响应)。

我尝试在我的 get/post 请求中添加“observe:'response'”选项,但 Location 标头再次不存在并且它从不显示 302(即使我可以在我的调试控制台中看到它)。

我已验证这不是 CORS 问题,因为在代理上,公开标头选项设置为位置值。

我唯一能做的就是使用 iframe 并在 iframe 上监听重定向。但我不想这样做,因为它笨重而且并不总是可靠的。

有谁能告诉我,有没有办法使用 Angular 的 Httpclient 捕获、拦截或查看 GET/POST 请求的 302 响应中的位置标头?我可以下载某种插件或节点模块来帮助我实现这一目标吗?

【问题讨论】:

也许你想看看***.com/questions/36885556/… 据我所知,这是一个服务器端问题。也许解决这个问题的唯一方法是让服务器将重定向标志添加到 url,然后在客户端相应地处理它作为短期修复。见:airbrake.io/blog/http-errors/302-found 【参考方案1】:

302 状态码 - URL 重定向将由浏览器直接处理。 Angular2 http 客户端不会收到此事件。

尝试使用 Jquery 脚本调用

$.ajax(
        url: "service call URL",
        dataType: "script",
        crossDomain: true,//if needed
        statusCode: 
          302: function() 
             alert( "redirect" );
          
        
        success: function()
      );

http://api.jquery.com/jquery.ajax/

状态代码部分

【讨论】:

以上是关于从角度 4.3+ 中的 302(重定向)响应中检索标头的主要内容,如果未能解决你的问题,请参考以下文章

处理 http 302 重定向响应

Java 中的 URL 重定向返回 302 而不是 301

ajax与重定向

从 Chrome 重定向到带有位置标头的 302 后被阻止的 Android 应用

表单提交响应 301 或 302

Service Worker:如何处理 302 重定向响应