【问题标题】:303 redirection not working with Angular HTTP POST303 重定向不适用于 Angular HTTP POST
【发布时间】:2013-11-13 11:25:28
【问题描述】:

我正在调用身份验证服务,我在其中执行 $http.post,它返回 303 响应,重定向到返回响应的 get 调用。

当我使用 Postman 进行 post 调用时,我得到了所需的响应,但是当我进行有角度的 $http.post 调用时,它返回一个 401 错误(这是用户未授权)

我在进行角度调用时是否遗漏了什么?后端服务似乎运行良好,因为它在 Postman 上运行良好。

这就是 $http 调用的样子:

$http.post(url, userData).success(function(data, status) {
   //handle success
}.error(function(data, status) {
   //handle error   
});

在这种情况下,url 和用户数据构造得非常好。

【问题讨论】:

    标签: angularjs http-status-code-303


    【解决方案1】:

    您收到GET 调用的原因是浏览器在角度到达之前处理了 303 响应。并且处理顺序是先到浏览器再到angular框架。

    简而言之,发生的事情是:您调用服务器 --> 服务器返回 303 响应 -> 您的浏览器处理 303 并向某个 url 发出请求(应该是 'location ' 在响应头中) --> 服务器接收请求并返回 401 授权响应 --> 再次浏览器首先收到 401 响应,但这一次浏览器将响应重定向到 angular --> 最后你可以收到error()里面的数据和状态。

    对此的解决方案可能是切换到其他响应状态代码,例如 2xx,您可以从正文中获取 location。然后您可以手动进行重定向。如果您必须使用 303 或其他 3xx 作为响应代码,我认为目前没有任何有效的解决方案,因为您无法对浏览器做太多事情。据我所知,浏览器级别可能有解决方案,但不知道什么时候会发生。

    希望这可以帮助任何有类似问题的人,尽管这个问题提出已经将近一年了。

    其他一些参考:https://groups.google.com/forum/#!topic/angular/GKkdipdMbdo 您可以从上面的链接中看到类似的解决方案。

    【讨论】:

      【解决方案2】:

      我遇到了这个问题,经过数小时的努力,我在 error 对象中找到了一个重定向 URL。

      loginWithLinkedIn() {
          let data = {
              // some kind of information here
          }
      
          return this.http.get(`https://www.someurl.com/oauth/v2/authorization`).subscribe(res => {
             console.log(res)
          }, err => {
             console.log(err.url) // here is the redirect url
             window.location.href = err.url
          })
      }
      

      Note: 当您发出请求并收到 303 响应时,这被视为错误,这就是为什么我们认为我们收到错误但错误包含有用信息的原因。

      【讨论】:

        猜你喜欢
        • 2015-08-31
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 2020-05-08
        • 2018-01-29
        • 2018-12-23
        • 2014-12-02
        • 2014-04-16
        相关资源
        最近更新 更多