use*_*609 32 networking http network-protocols
如何理解无状态协议和状态协议?HTTP是无状态协议,FTP是有状态协议.对于需要大量交互的Web应用程序,底层协议应该是有状态的.我的理解是对的吗?
jjp*_*dor 45
HTTP是无状态协议,换句话说,服务器将忘记与客户端/浏览器状态相关的所有内容.虽然Web应用程序使其几乎看起来像有状态.
无状态协议可以被强制表现为有状态.如果服务器将状态发送到客户端,并且客户端每次都将其再次发送回服务器,则可以实现此目的.
在HTTP中有三种方法可以实现:
a)一个是cookie,在这种情况下,状态在HTTP头中发送和返回.
b)第二个是URL扩展,在这种情况下,状态作为响应发送为URL的一部分.
c)第三个是"隐藏表单字段",其中状态作为响应的一部分发送给客户端,并作为表单隐藏数据的一部分返回到服务器
可扩展性和高可用性
HTTP扩展如此之好的主要原因之一是其无状态.无状态协议简化了复制问题,因为状态本身不需要存储在服务器上.
有状态的协议在逻辑上很重,可以在Internet上可靠地实现.无状态服务器也很容易扩展,而对于有状态服务器,可扩展性也存在问题.无状态请求可以随时发送到任何节点,而有状态则不是这种情况.
HTTP作为无状态协议增加了无状态Web应用程序的可用性,否则将很难或无法实现.如果连接丢失,则没有丢失的状态,简单的请求重发将解决问题.无状态请求也是可缓存的.
Pau*_*nan 16
由于您询问的是Web应用程序,协议将始终是无状态的 - Web的协议是http(或https),而这就是她所写的.
我认为您正在考虑的是在Web应用程序本身中提供状态机制.典型的方法是在Web应用程序中创建用户会话的唯一标识符(一种或另一种形式的会话ID是常见做法),它在浏览器和服务器之间来回传递.这通常是在一个cookie中完成的,虽然它可以完成,根据您的平台/框架,在URL上也会有一些麻烦.
您的服务器端代码存储有状态信息(同样,通常称为用户会话)但是它想要使用sessionID查找它.http流量只是回传sessionID.只要该标识符存在,每个http事务完全独立于所有其他事务,因此协议流量本身是无状态的.
Anything that forgets whatever it did in past is stateless, such as http
Anything that can keep the history is statefull, such as database
Run Code Online (Sandbox Code Playgroud)
Http 是一种无状态协议,这就是它忘记用户信息的原因。
我们使用jsonWebToken(JWT)将 http 作为 statefull 协议,即在每个去服务器的请求上,服务器将首先使用JWT验证用户。
小智 5
HTTP是stateless protocol。所有基于Web的应用程序也都stateless。
当请求发送到服务器时,在客户端和服务器之间建立连接。服务器接收请求,处理请求并发送回响应,然后连接将关闭。
如果将发送另一个请求,此后,它将被视为新请求并建立新连接。
为了制作HTTP stateful,我们使用会话管理技术。因此,它在处理当前请求时使用来自先前请求的数据,即,它将相同的连接用于一系列客户端服务器交互。
会话管理技术为:
| 归档时间: |
|
| 查看次数: |
53795 次 |
| 最近记录: |