如何理解无状态协议和有状态协议?HTTP是无状态协议,而FTP是有状态协议。对于需要大量交互的web应用程序,底层协议应该是有状态的。我的理解正确吗?
发布于 2011-04-30 04:19:30
由于您询问的是Web应用程序,因此协议将始终是无状态的-- Web的协议是http (或https),这就是她所写的。
我认为您正在考虑的是在Web应用程序本身中提供一种状态机制。典型的方法是在Web应用程序中为用户的会话创建一个惟一的标识符(通常使用某种形式的sessionID ),该标识符在浏览器和服务器之间来回传递。这通常是在cookie中完成的,但也可以在URL上完成,根据您的平台/框架,这会给您带来更多麻烦。
您的服务器端代码存储有状态信息(同样,通常称为用户会话),但是它希望使用sessionID来查找这些信息。http流量简单地交还sessionID。只要该标识符存在,每个http事务就完全独立于所有其它事务,因此协议业务本身是无状态的。
发布于 2012-10-09 02:46:11
HTTP是一种无状态协议,换句话说,服务器将忘记与客户端/浏览器状态相关的所有内容。尽管web应用程序让它看起来像是有状态的。
可以强制无状态协议的行为就好像它是有状态的。如果服务器每次都将状态发送到客户端,并且客户端再次将其发送回服务器,则可以实现这一点。
在HTTP中,有三种方法可以实现这一点:
a)一种是cookies,在这种情况下,状态在HTTP标头中发送和返回。
b)第二个是URL扩展,在这种情况下,状态作为URL的一部分作为响应发送。
c)第三个是“隐藏表单字段”,其中状态作为响应的一部分发送到客户端,并作为表单隐藏数据的一部分返回到服务器
可伸缩性和高可用性
HTTP可伸缩性如此之好的一个主要原因是它的无状态性。无状态协议缓解了复制问题,因为状态本身不需要存储在服务器上。
在Internet中可靠地实现有状态协议在逻辑上是繁重的。无状态服务器也很容易扩展,而对于有状态服务器,可伸缩性是有问题的。无状态请求可以在任何时间发送到任何节点,而使用有状态则不是这样。
HTTP作为无状态协议增加了无状态web应用程序的可用性,否则将很难或不可能实现。如果连接丢失,则不存在丢失状态,只需重新发送请求即可解决问题。无状态请求也是可缓存的。
see more here
发布于 2017-02-02 14:33:29
HTTP是一个stateless protocol。所有基于web的应用程序也都是stateless的。
当请求被发送到服务器时,在客户端和服务器之间建立连接。服务器接收请求,处理请求并发回响应,然后,连接将关闭。
如果要发送另一个请求,在此之后,它将被视为新的请求并建立新的连接。
为了使超文本传输协议stateful,我们使用了会话管理技术。因此,它在处理当前请求时使用来自前一个请求的数据,即,它使用相同的连接进行一系列客户端-服务器交互。
会话管理技术包括:
隐藏表单field
的
https://stackoverflow.com/questions/5836881
复制相似问题