在理解 Cookie
、Session
等状态缓存方案的时候,很多人说因为 HTTP
是无状态协议,所以无法记住登陆状态。那么无状态指的是什么呢?
登陆状态是你开发应用的状态,而不是协议本身的状态。所以我更加偏向于理解协议状态指的是协议本身是否有不同的状态,而不是协议是否支持保存应用的状态。
需要注意有无状态针对的是协议本身(应用层),而不是底层实现,避免混淆了 HTTP
传输层中也有握手等中间过程状态。所以我们只从一次请求的过程去判断协议是否有状态,会发现无论你什么时候请求 HTTP
,它都独立的,不会被前面的请求影响,不会处在不同的状态。
综上,即使是有状态协议,也不一定支持记住登陆状态,要看协议内置状态是否和业务逻辑的登陆状态挂钩。例如 FTP 协议
,你需要登录了,才能拉取目录/文件,而 TCP 协议
的 LISTREN、 CLOSED、CLOSING 等状态和业务的关系不大。