为什么说HTTP是一个无状态协议?

HTTP有HTTP Cookies。 Cookies允许服务器跟踪用户状态,连接数量,上次连接等。

HTTP具有持久连接(Keep-Alive),可以在同一个TCP连接中发送多个请求。

即使可以通过相同的HTTP连接发送多个请求,服务器也不会在通过同一个套接字到达时附加任何特殊含义。 这只是一个性能方面的事情,旨在最大限度地减less重复build立每个请求的连接所花费的时间/带宽。

就HTTP而言,它们仍然是单独的请求,并且必须包含足够的信息来完成请求。 这就是“无国籍”的本质。 在没有服务器知道的一些共享信息的情况下,请求将不会彼此关联,这在大多数情况下是cookie中的会话ID。

维基百科 :

HTTP是一个无状态的协议。 无状态协议不要求服务器在多个请求期间保留关于每个用户的信息或状态。

但是,一些Web应用程序可能需要跟踪用户的页面之间的进度,例如,当需要Web服务器来自定义用户的网页内容时。 这些案例的解决scheme包括:

  • 使用HTTP cookies。
  • 服务器端会话,
  • 隐藏variables(当前页面包含表单)和
  • 使用URI编码的参数进行URL重写,例如/index.php?session_id=some_unique_session_code。

协议无状态的原因是服务器不需要跟踪多个请求的状态,而不是如果需要的话就不能这样做。 这简化了客户端和服务器之间的协议,并且在很多情况下(例如通过CDN提供静态数据)最小化了需要传输的数据量。 如果要求服务器保持客户访问状态,则发布和响应请求的结构将更为复杂。 事实上,模型的简单性是其最大的特点之一。

由于无状态协议不要求服务器在多个请求期间保留有关每个通信伙伴的会话信息或状态。

HTTP是一种无状态协议,这意味着一旦事务结束,浏览器和服务器之间的连接就会丢失。

如果协议HTTP作为State Full协议提供,则浏览器窗口使用单一连接与Web服务器进行通信,以向Web应用程序提供多重请求。这使得浏览器窗口有机会长时间连接浏览器窗口和Web服务器,并保持它们长时间处于空闲状态。即使客户端中的大部分连接都是空闲的,这也可能造成networking服务器达到最大连接的情况。

HTTP是无连接的,这是HTTP是无状态协议的直接结果。 服务器和客户端只在当前的请求期间才知道彼此。 之后,他们俩都忘记了对方。 由于协议的这种性质,客户端和浏览器都不能在网页的不同请求之间保留信息。

这不是无国籍的。 HTTP(通常)build立在有状态的TCP之上。 它至less维护连接信息。 如果它是build立在UDP上,事情会有所不同。

说HTTP是无状态的就像说计算机程序是无电子的,因为托pipe它们的电脑是使用电子的。 这是无稽之谈。 以同样的方式,你不能完全分离HTTP从TCP。

层