【问题标题】:What makes a distinct HTTP client for HttpSession?是什么让 HttpSession 具有独特的 HTTP 客户端?
【发布时间】:2021-09-08 01:16:05
【问题描述】:

我知道HttpSession (Servlet API document)

servlet 容器使用此接口在 HTTP 客户端和 HTTP 服务器之间创建会话。

我想知道什么是独特的 HTTP 客户端?

希望答案能涵盖以下场景:

  1. 在同一个浏览器中打开一个新标签页会产生不同的客户端吗?
  2. 打开不同的浏览器会产生不同的客户端吗?
  3. 服务器定义不同 HTTP 客户端的规则是否适用于所有类型的服务器、客户端计算机和操作系统?

【问题讨论】:

    标签: httpclient httpsession


    【解决方案1】:

    这里要基本理解的是HTTP是一个无状态协议,即从客户端到服务器建立一个连接,客户端发出请求,服务器给出响应,之后连接被终止并“被遗忘”。凭借 HTTP 本身,一个请求中的任何内容都不会转移到其他请求。

    会话是一种绕过 HTTP 基本限制的方法,一种将不同请求关联起来形成一种涉及许多请求的“对话”的方法。通过使用某种会话,客户端告诉服务器“嘿,我是之前和你说话的那个人”,服务器记住“是的,我记得你,让我们从离开的地方继续”。看起来微不足道,但 HTTP 没有这样做的自然方式。

    例如,实现会话的一种非常常见的方式是使用 cookie。在第一次连接时,服务器向客户端发送一个 cookie,然后客户端在所有后续请求中发送相同的 cookie,以便服务器知道谁在说话。登录令牌、本地存储中的数据甚至隐藏的 HTML 字段也是建立会话的可能方式。这样的会话允许网络拥有登录页面并返回登录状态。这也是为什么删除 cookie 会踢出网站,服务器不再知道你是谁。

    所以,现在要回答具体问题:

    我想知道什么是独特的 HTTP 客户端?

    不同客户端的唯一指示是“会话”。服务器只知道告诉他们分开或假设他们是相同的。如果会话标识符相同(例如 cookie),则服务器假定它是返回的客户端。如果没有提供 id,服务器会认为它是一个新客户端。

    1. 在同一个浏览器中打开一个新选项卡会生成不同的客户端吗?

    通常情况下,不,它是同一个。不同的选项卡共享 cookie 和本地存储,因此服务器将看到相同的标识符并将新选项卡链接到第一个选项卡。事实上,服务器对选项卡(甚至浏览器)一无所知,只是查看发送的请求。

    例外:私人标签故意将 cookie 与普通标签隔离开来,不会发送它们。这就是为什么您需要在私人标签中再次登录。进入那里将创建第二个不同的会话标识符,服务器会将它们视为单独的。

    另一个例外:一些浏览器,本机或通过插件,也将 cookie/本地存储与某些选项卡隔离,正是为了实现多次登录。

    1. 打开不同的浏览器会产生不同的客户端吗?

    是的。浏览器不共享它们的内部状态,服务器不会从另一个浏览器获取会话 ID。除非您手动将 cookie 从一个复制到另一个。

    1. 服务器定义不同 HTTP 客户端的规则是否适用于所有类型的服务器、客户端计算机和操作系统?

    唯一“普遍”的事情是识别客户端的唯一基础是会话的概念,但它们的具体实现可能非常不同。会话 cookie 非常常见,通常由应用程序框架提供,但远非通用。由于 HTTP 本身不定义状态,因此由每个应用程序来定义它。

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多