如何理解无状态协议和有状态协议?HTTP 是无状态协议,FTP 是有状态协议。对于需要大量交互的 Web 应用程序,底层协议应该是有状态的。我的理解对吗?
HTTP 是一个无状态协议,换句话说,服务器会忘记与客户端 / 浏览器状态相关的一切。
可以强制无状态协议表现得好像它是有状态的。如果服务器将状态发送到客户端,并且客户端每次都将其再次发送回服务器,则可以实现这一点。
有三种方法可以在 HTTP 中完成:
a) 一个是 cookie,在这种情况下,状态在 HTTP 标头中发送和返回。
b)第二个是 URL 扩展,在这种情况下,状态作为 URL 的一部分作为请求发送。
c)第三个是“隐藏表单字段”,其中状态作为响应的一部分发送到客户端,并作为表单的隐藏数据的一部分返回到服务器
可扩展性和高可用性
HTTP 扩展如此之好的主要原因之一是它的无状态,无状态协议简化了复制问题,因为状态本身不需要存储在服务器上。
无状态请求可以在任何时间发送到任何节点,而有状态则不是这样。
HTTP 作为无状态协议增加了无状态 Web 应用程序的可用性,否则将很难或不可能实现。如果连接丢失,则没有丢失状态,简单的请求重新发送将解决问题。无状态请求也是可缓存的。
see more here既然你问的是一个 Web 应用程序,协议将永远是无状态的-Web 的协议是 http(或 https),这就是她写的。
我认为您正在考虑的是在 Web 应用程序本身中提供状态机制。典型的方法是在 Web 应用程序中为用户的会话创建一个唯一标识符(一种形式或另一种形式的 sessionID 是常见的做法),该标识符在浏览器和服务器之间来回传递。这通常是在 cookie 中完成的,尽管可以完成,但根据您的平台 / 框架以及 URL,您会遇到更多麻烦。
您的服务器端代码存储有状态的信息 (同样,通常称为用户的会话),但是它希望使用 sessionID 来查找它。http 流量只是将 sessionID 交回。只要该标识符存在,每个 http 事务就完全独立于所有其他事务,因此协议流量本身是无状态的。
HTTP 是一个stateless protocol
。所有基于 Web 的应用程序也都是stateless
。
当请求被发送到服务器时,客户端和服务器之间建立连接。服务器接收请求,处理请求并发送回响应,然后连接将被关闭。
如果将发送另一个请求,则在此之后,它将被视为新请求并建立新连接。
为了使 HTTPstateful
,我们使用会话管理技术。因此,它在处理当前请求时使用来自先前请求的数据,即它使用相同的连接进行一系列客户端服务器交互。
会话管理技术包括:
隐藏表单域
Cookie
会话
URL 重写
Anything that forgets whatever it did in past is stateless, such as http
Anything that can keep the history is statefull, such as database
Http 是一个无状态协议,这就是为什么它忘记了用户信息。
我们使用jsonWebToken(JWT)将 http 作为 statefull 协议,即在每个请求到服务器时,服务器将首先使用JWT验证用户。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(79条)