1. 无状态概念
1.1. 状态的含义
- 服务器是否具有数据储存功能;
- 判断依据是指两个来自相同发起者的请求在服务器端是否具有上下文关系。
1.2. 无状态的含义
- 同一个 URL 请求没有上下文关系;
- 协议对事务处理没有记忆能力;
- 每次请求都是相互独立的,它的执行结果与之前的请求和之后的请求是没有直接关系的,不会受之前的请求应答结果直接影响,也不会影响到后面的请求的应答;
- 服务器中没有保存客户端的状态,客户端每次必须带上自己的额状态区请求服务器。
1.3. 网络协议状态
- IP 是无状态的,IP 协议只负责把数据包发送到指定 IP,不会考虑前面是否已经发生过数据包,也不考虑后面还会不会发送数据包;
- TCP 是有状态的,通过包头中的控制字段表明各个包之间的关系,从而做到可靠传输。同时,TCP 是面向连接的,TCP 通过“三次握手”确保对方存在,并未有状态的连接做准备;
- UDP 是无状态的,做不到可靠传输,也不需要建立连接;
- HTTP 是无状态的,HTTP 底层是 TCP(有状态),但是每次 HTTP 请求之间是没有任何关系的;
2. Http 无状态
- 服务器没有保存客户端的状态信息;
- 客户端每次必须带上去哪个自己的状态向服务器发送请求,比如借助于 cookie 或 session 发起访问。
注意:
HTTP 之所以设计出无状态的,原因是:
-- HTTP 协议下同一个 URL 对应同一个超文本,这对所有的访问请求来说都是一样的,没有必要设计成有状态的;
-- 另外,无状态下服务器的资源很快被释放,应答速度会更快;
- 随着用户需求和技术的发展,静态网页上逐渐增加了许多动态生成的内容,HTML 语法增加了 Form 表单等,浏览器也增加了 Dom 等功能,HTTP 协议无状态属性严