是什么让 HttpSession 成为一个独特的 HTTP 客户端?
What makes a distinct HTTP client for HttpSession?
我理解 HttpSession (Servlet API document)
The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
我想知道什么是独特的 HTTP 客户端?
希望回答能涵盖以下场景:
- 在同一个浏览器中打开新标签页是否会产生不同的客户端?
- 打开不同的浏览器会产生不同的客户端吗?
- 服务器定义不同 HTTP 客户端的规则是否在所有类型的服务器和客户端机器上通用并且OS?
这里要理解的根本是HTTP是一个无状态协议,即客户端与服务器建立连接,客户端发出请求,然后服务器给出响应,之后连接终止并“被遗忘”。由于 HTTP 本身,请求中的任何内容都不会转移到其他请求。
A session 是一种绕过 HTTP 基本限制的方法,一种将不同请求关联起来形成一种涉及许多请求的“对话”的方法。通过使用某种会话,客户端告诉服务器“嘿,我是之前和你说话的人”,服务器记住“是的,我记得你,让我们从我们离开的地方继续”。看起来微不足道,但 HTTP 没有这样做的自然方式。
例如,实现会话的一种非常常见的方式是使用 cookie。在第一次连接时,服务器向客户端发送一个 cookie,然后客户端在所有后续请求中发送相同的 cookie,以便服务器知道谁在说话。登录令牌、本地存储中的数据甚至隐藏的 HTML 字段也是建立会话的可能方式。这样的会话允许网络拥有登录页面并返回到登录状态。这也是为什么删除 cookie 会踢出网站,服务器不再知道你是谁。
所以,现在要回答具体问题:
I want to know what makes a distinct HTTP client?
不同客户端的唯一标识是“会话”。服务器只知道告诉他们 appart 或假设他们是相同的。如果会话标识符相同(例如,cookie),则服务器假定它是返回的客户端。如果没有提供 id,服务器会认为它是一个新客户端。
- Does opening a new tab in the same browser make a different client?
更多时候,不,是同一个。不同的选项卡共享 cookie 和本地存储,因此服务器将看到相同的标识符和 link 新选项卡到第一个选项卡。事实上,服务器对选项卡(甚至浏览器)一无所知,只会查看发送的请求。
异常:私人标签故意将 cookie 与普通标签隔离开来,不会发送它们。这就是为什么您需要在私人标签中再次登录。进入那里将创建第二个不同的会话标识符,服务器会将它们视为独立的。
另一个例外:某些浏览器,无论是原生的还是通过插件,也将 cookies/local 存储与某些选项卡隔离开来,正是为了实现多次登录。
- Does opening a different browser make a different client?
是的。浏览器不共享它们的内部状态,服务器也不会从一个浏览器获取另一个浏览器的会话 ID。除非您手动将 cookie 从一个复制到另一个。
- Is the rule for a server to define a distinct HTTP client universal across all types of servers and client machines and OS?
唯一“通用”的是,识别客户端的唯一依据是会话的概念,但它们的具体实现可能非常不同。会话 cookie 很常见,通常由应用程序框架提供,但远未普及。由于 HTTP 本身不定义状态,因此由每个应用程序来定义它。
我理解 HttpSession (Servlet API document)
The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
我想知道什么是独特的 HTTP 客户端?
希望回答能涵盖以下场景:
- 在同一个浏览器中打开新标签页是否会产生不同的客户端?
- 打开不同的浏览器会产生不同的客户端吗?
- 服务器定义不同 HTTP 客户端的规则是否在所有类型的服务器和客户端机器上通用并且OS?
这里要理解的根本是HTTP是一个无状态协议,即客户端与服务器建立连接,客户端发出请求,然后服务器给出响应,之后连接终止并“被遗忘”。由于 HTTP 本身,请求中的任何内容都不会转移到其他请求。
A session 是一种绕过 HTTP 基本限制的方法,一种将不同请求关联起来形成一种涉及许多请求的“对话”的方法。通过使用某种会话,客户端告诉服务器“嘿,我是之前和你说话的人”,服务器记住“是的,我记得你,让我们从我们离开的地方继续”。看起来微不足道,但 HTTP 没有这样做的自然方式。
例如,实现会话的一种非常常见的方式是使用 cookie。在第一次连接时,服务器向客户端发送一个 cookie,然后客户端在所有后续请求中发送相同的 cookie,以便服务器知道谁在说话。登录令牌、本地存储中的数据甚至隐藏的 HTML 字段也是建立会话的可能方式。这样的会话允许网络拥有登录页面并返回到登录状态。这也是为什么删除 cookie 会踢出网站,服务器不再知道你是谁。
所以,现在要回答具体问题:
I want to know what makes a distinct HTTP client?
不同客户端的唯一标识是“会话”。服务器只知道告诉他们 appart 或假设他们是相同的。如果会话标识符相同(例如,cookie),则服务器假定它是返回的客户端。如果没有提供 id,服务器会认为它是一个新客户端。
- Does opening a new tab in the same browser make a different client?
更多时候,不,是同一个。不同的选项卡共享 cookie 和本地存储,因此服务器将看到相同的标识符和 link 新选项卡到第一个选项卡。事实上,服务器对选项卡(甚至浏览器)一无所知,只会查看发送的请求。
异常:私人标签故意将 cookie 与普通标签隔离开来,不会发送它们。这就是为什么您需要在私人标签中再次登录。进入那里将创建第二个不同的会话标识符,服务器会将它们视为独立的。
另一个例外:某些浏览器,无论是原生的还是通过插件,也将 cookies/local 存储与某些选项卡隔离开来,正是为了实现多次登录。
- Does opening a different browser make a different client?
是的。浏览器不共享它们的内部状态,服务器也不会从一个浏览器获取另一个浏览器的会话 ID。除非您手动将 cookie 从一个复制到另一个。
- Is the rule for a server to define a distinct HTTP client universal across all types of servers and client machines and OS?
唯一“通用”的是,识别客户端的唯一依据是会话的概念,但它们的具体实现可能非常不同。会话 cookie 很常见,通常由应用程序框架提供,但远未普及。由于 HTTP 本身不定义状态,因此由每个应用程序来定义它。