【问题标题】:Browser doesn't redirect浏览器不重定向
【发布时间】:2013-09-24 17:20:54
【问题描述】:

我有带有牛仔和 angular.js 的 erlang Web 应用程序。

我启动了我的应用程序,在“/”中打开了浏览器,并得到了带有 <input><button> 的 main.html。当我按下按钮时,我向服务器发送 http POST 请求到带有角度 $http/join/username,在服务器上得到这个 POST 请求并将重定向发送到浏览器:

{ok, Req4} = cowboy_req:reply(303, [{"Location", <<"/chat.html">>}], <<"">>, Req3)
{:ok, req4, State}

重定向响应标头:

 HTTP/1.1 303 See Other
 connection: keep-alive
 server: Cowboy
 date: Thu, 19 Sep 2013 14:36:01 GMT
 content-length: 0
 Location: /chat.html
 Cache-Control: no-store

发送重定向后,我收到来自浏览器的“GET”请求,路径为“/chat.html”,没关系。我阅读了 chat.html 并将其发送回浏览器,但浏览器没有呈现它,并且浏览器中的 url 也没有改变。我在浏览器控制台中看到了 chat.html 200。

为什么浏览器不呈现新页面 - chat.html

UPD 1.

如果我在浏览器中手动输入/join/username,它会正常重定向。为什么?

谢谢。

【问题讨论】:

    标签: ajax http redirect erlang cowboy


    【解决方案1】:

    您说您正在使用来自 Angular 的 $http 服务调用服务器。这意味着您正在进行 AJAX 调用。响应数据被发送到您在构造$http 调用时提供的success 回调。在这种情况下,您的响应数据将是您的 chat.html 文件的有效负载:

    $http({method: 'POST', url: '/join/username'}).
      success(function(data, status, headers, config) {
        // data will be the content from chat.html
      });
    

    浏览器仅可见在作为正常导航流程的一部分发出请求时遵循重定向。 AJAX 请求确实遵循重定向,但结果不会显示在浏览器窗口中 - 它会返回到您的代码中。这就是为什么在浏览器中输入地址对您有用。

    如果您想遵循该重定向,您只需让您的 HTML 表单直接提交 /join/username 并摆脱 Angular AJAX 调用。

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多