【问题标题】:How HTTP redirects(302) works during an ajax callHTTP 重定向 (302) 在 ajax 调用期间如何工作
【发布时间】:2021-03-03 07:58:30
【问题描述】:

我被要求对旧的 java 7/struts 1 Web 应用程序实施“每个帐户一个会话”限制。

在开发过程中,我遇到了一种我无法真正理解的行为。

因此,如果当前有一个帐户“Account-A”使用会话“Session-1234”登录,然后同一个帐户登录但使用不同的会话“Session-4567”然后会话“Session-1234”在该会话执行的下一个请求中被标记为无效。

在“Session-1234”失效的过程中,其中一个步骤是将客户端重定向(302)到登录页面。

现在是我不明白的。

如果请求以“同步”模式进入,一切都会按预期进行。

用户点击了某个链接

  1. 服务器 -> 使会话无效并重定向 (302) 登录。
  2. Browser -> 检测 302 查找 Location 标头并执行获取。
  3. 服务器 -> 为资源提供服务。
  4. 浏览器 -> 显示登录并更新 URL。

如果请求以“异步”模式(即 AJAX)进入,现在我遇到了问题,因为页面永远不会更改,登录的内容会显示在此处。

我的问题不是如何解决这个“问题”,而是要很好地理解它为什么会这样。

【问题讨论】:

    标签: ajax http redirect


    【解决方案1】:

    如果您使用的是程序化客户端,您有两个主要选择:

    1. 不要使用 cookie,使用 Authorization 标头并让服务器发出 401,告诉客户端他们的令牌现在无效。
    2. 使用您的 javascript 客户端,读取服务器是否返回了 302 响应和 Location 标头并做出响应。

    #2 基本上是一个 hack,可以让您模仿标准浏览器的行为。 #1 更适合 API。

    【讨论】:

    • 感谢您的评论,但我真的希望了解当客户端请求由 ajax 发出时服务器重定向 (302) 客户端过程的内部工作原理。正如我所说,如果请求是由 ajax 发出的,然后服务器重定向,那么页面(URL)不会改变并且重定向的内容显示在同一页面上。大混乱!!!
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2018-10-10
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多