在理解 Cookie、Session 等状态缓存方案的时候,很多人说因为 HTTP 是无状态协议,所以无法记住登陆状态。那么无状态指的是什么呢?

登陆状态是你开发应用的状态,而不是协议本身的状态。所以我更加偏向于理解协议状态指的是协议本身是否有不同的状态,而不是协议是否支持保存应用的状态

需要注意有无状态针对的是协议本身(应用层),而不是底层实现,避免混淆了 HTTP 传输层中也有握手等中间过程状态。所以我们只从一次请求的过程去判断协议是否有状态,会发现无论你什么时候请求 HTTP,它都独立的,不会被前面的请求影响,不会处在不同的状态。

综上,即使是有状态协议,也不一定支持记住登陆状态,要看协议内置状态是否和业务逻辑的登陆状态挂钩。例如 FTP 协议,你需要登录了,才能拉取目录/文件,而 TCP 协议的 LISTREN、 CLOSED、CLOSING 等状态和业务的关系不大。

参考资料