我理解通过HttpSession(Servlet API文档(
servlet容器使用此接口在HTTP客户端和HTTP服务器之间创建会话。
我想知道是什么造就了一个与众不同的HTTP客户端?
我希望答案能涵盖以下情况:
- 在同一个浏览器中打开一个新选项卡会产生不同的客户端吗
- 打开不同的浏览器会产生不同的客户端吗
- 服务器定义不同HTTP客户端的规则是否适用于所有类型的服务器、客户端机器和操作系统
这里要理解的基本问题是HTTP是一个无状态协议,也就是说,从客户端到服务器建立连接,客户端发出请求,服务器给出响应,然后连接终止并"被遗忘";。通过HTTP本身,一个请求中的任何内容都不会转移到另一个请求。
会话是绕过HTTP的基本限制的一种方式,HTTP是一种将不同请求关联起来以形成某种"会话"的方式;对话";涉及许多请求。通过使用某种会话,客户端告诉服务器";嘿,我是那个之前和你说话的人"服务器记住";是的,我记得你,让我们继续我们离开的地方;。看起来微不足道,但HTTP并没有一种自然的方式来做到这一点
例如,实现会话的一种非常常见的方法是使用cookie。在第一次连接时,服务器向客户端发送cookie,然后客户端在所有后续请求中发送相同的cookie,以便服务器知道谁在说话。登录令牌、本地存储中的数据甚至隐藏的HTML字段也是建立会话的可能方式。这样的会话允许网络拥有登录页面并返回登录状态。这也是为什么删除cookie会被踢出网站,服务器不再知道你是谁。
所以,现在来回答具体的问题:
我想知道是什么造就了一个与众不同的HTTP客户端?
不同客户端的唯一指示是";会话";。服务器只知道告诉他们appert或假设他们是一样的。如果会话标识符相同(例如,cookie(,则服务器会认为它是一个返回的客户端。如果没有提供id,服务器就会认为它是一个新客户端。
- 在同一浏览器中打开一个新选项卡会产生不同的客户端吗
通常情况下,不,是同一个。不同的选项卡共享cookie和本地存储,因此服务器将看到相同的标识符,并将新选项卡链接到第一个选项卡。事实上,服务器对选项卡(甚至浏览器(一无所知,只查看发送的请求。
例外:私人标签故意将cookie与普通cookie隔离开来,不会发送它们。这就是为什么你需要在私人选项卡中再次登录。在那里输入会创建第二个不同的会话标识符,服务器会将它们视为单独的。
另一个例外是:一些浏览器,无论是本机浏览器还是通过插件浏览器,也会将cookie/本地存储与一些选项卡隔离,以实现多次登录。
- 打开不同的浏览器会产生不同的客户端吗
是。浏览器不共享其内部状态,服务器也不会从另一个浏览器获取一个浏览器的会话id。除非您手动将cookie从一个复制到另一个。
- 服务器定义不同HTTP客户端的规则是否适用于所有类型的服务器、客户端机器和操作系统
;通用的";问题是,识别客户端的唯一基础是会话的概念,但它们的具体实现可能非常不同。会话cookie非常常见,通常由应用程序框架提供,但远不是通用的。由于HTTP本身并不定义状态,因此由每个应用程序来定义它