首页 文章

为什么说“HTTP是无状态协议”?

提问于
浏览
134

HTTP有HTTP Cookie . Cookie允许服务器跟踪用户状态,连接数,最后连接数等 .

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

8 回答

  • 88

    即使可以通过同一HTTP连接发送多个请求,服务器也不会通过同一个套接字附加任何特殊含义 . 这仅仅是一种性能问题,旨在最大限度地减少为每个请求重新 Build 连接所花费的时间/带宽 .

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

  • 19

    来自Wikipedia

    HTTP是无状态协议 . 无状态协议不要求服务器在多个请求期间保留关于每个用户的信息或状态 . 但是,一些Web应用程序可能必须跟踪用户在页面之间的进度,例如,当需要Web服务器为用户定制Web页面的内容时 . 这些案例的解决方案包括:使用HTTP cookie . 服务器端会话,隐藏变量(当前页面包含表单时),以及使用URI编码参数进行URL重写,例如/index.php?session_id=some_unique_session_code .

    使协议无状态的原因是服务器不需要跟踪多个请求的状态,而不是如果它想要的话它不能这样做 . 这简化了客户端和服务器之间的 Contract ,并且在许多情况下(例如通过CDN提供静态数据)最小化了需要传输的数据量 . 如果要求服务器维护客户端访问的状态,则发出和响应请求的结构将更加复杂 . 实际上,模型的简单性是其最大的特征之一 .

  • -5

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

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

  • 0

    如果协议HTTP作为状态完整协议给出,则浏览器窗口使用单个连接与Web服务器进行通信,以便为Web应用程序提供多个请求 . 这使浏览器窗口有机会长时间参与浏览器窗口和Web服务器之间的连接并保持它们处于空闲状态很长时间 . 这可能会创建达到Web服务器最大连接的情况,即使客户端中的大多数连接都处于空闲状态 .

  • 96

    HTTP是无连接的,这是HTTP是无状态协议的直接结果 . 服务器和客户端仅在当前请求期间相互了解 . 之后,他们两个都忘记了彼此 . 由于协议的这种性质,客户端和浏览器都不能在跨网页的不同请求之间保留信息 .

  • 3

    HTTP是无状态的 . TCP是有状态的 . 没有所谓的“HTTP连接”,只有“HTTP请求”和“HTTP响应” . 我们不需要维护任何内容来制作另一个“HTTP请求” . “保持活动”的连接头意味着TCP将由后续的HTTP请求和响应重用,而不是始终断开和重新 Build TCP连接 .

  • 3

    无状态说服务器的可能状态也是资源,应该给它们自己的URI . 客户端不应该将服务器哄骗到特定状态以使其接受某个请求 .

  • 0

    It isn't stateless. HTTP(通常)构建在TCP之上,这是有状态的 . 它至少维护连接信息 . 如果它 Build 在UDP上,那么事情会有所不同 .

    说HTTP是无状态的就像是说计算机程序是无电子的,因为托管它们的计算机是使用电子的 . 那是胡说八道 . 同样,您无法将HTTP与TCP完全分开 .

    layers

相关问题