当他们说 http 是无状态的时,这意味着什么

2023-11-27

我正在研究java for web,它提到http是无状态的。 这意味着什么以及它如何影响编程

我也在研究 spring 框架,其中提到一些 bean 在状态变化时必须声明为内部 bean。这意味着什么?


HTTP——服务器和客户端之间的实际传输协议——是“无状态的”,因为它在调用之间不记得任何内容。EVERY通过 HTTP 访问的资源是单个请求,它们之间没有线程连接。如果您加载一个带有 HTML 文件的网页,其中包含三个<img>标签命中同一服务器,将协商并打开四个 TCP 连接,四个数据传输,四个连接关闭。服务器根本没有保存任何状态at the protocol level当你进来时,服务器就会知道你的任何信息。

(嗯,无论如何,对于 HTTP 1.0 来说都是如此。HTTP 1.1 添加了各种持久连接机制,因为真正的无状态协议会不可避免地产生性能问题。我们暂时忽略这一点,因为它们实际上并没有使 HTTP 有状态,他们只是将其设为脏无状态而不是纯无状态。)

为了帮助您理解其中的差异,想象一下像 Telnet 或 SSH 这样的协议是无状态的。如果您想获取远程文件的目录列表,您必须作为一项原子操作,连接、登录、更改到目录并发出ls命令。当。。。的时候ls命令显示完目录内容后,连接将关闭。如果您随后想要显示特定文件的内容,则必须再次连接、登录、更改到目录,然后发出cat命令。当显示文件的命令完成时,连接将再次关闭。

当你这样看时,尽管从 Telnet/SSH 的角度来看,这听起来相当愚蠢,不是吗?嗯,在某些方面是这样,在某些方面又不是。当协议是无状态的时,服务器可以进行一些非常好的优化,并且数据可以轻松地传播。使用无状态协议的服务器可以非常有效地扩展,因此虽然实际的单个数据传输可能非常慢(打开和关闭 TCP 连接并不便宜!),但整个系统可以非常非常高效,并且可以扩展到任意数量的用户。

But...

除了查看静态网页之外,几乎您想做的任何事情都将涉及会话和状态。当 HTTP 用于其最初目的(共享科学论文等静态信息)时,无状态协议就很有意义。当您开始将其用于 Web 应用程序、在线商店等时,无状态性就开始成为麻烦,因为这些本质上是有状态的活动。结果,人们很快就想出了在无状态协议之上添加大量状态的方法。这些机制包括 cookies 之类的东西,比如 URL 中的编码状态,以及让服务器基于这些内容动态启动数据,比如隐藏状态请求,比如……好吧,就像一大堆东西,包括更现代的东西像 Web Sockets 之类的东西。

您可以点击以下几个链接来更深入地了解这些概念:

  • http://en.wikipedia.org/wiki/Stateless_server
  • http://en.wikipedia.org/wiki/HTTP
  • http://en.wikipedia.org/wiki/HTTP_persistent_connection
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当他们说 http 是无状态的时,这意味着什么 的相关文章

随机推荐