HTTP:Http 协议 无连接 & 无状态 概念解析

1. 无连接概念

1.1. 无连接

  • 通信双方不需要事先建立一条通信线路;
  • 在无连接方法中,网络把分组数据传送到目的地之外不做任何事情;
  • 如果分组数据传送中丢失,接收方必须检测到错误并请求重发;
  • 如果分组因采用不同路径而未按顺序到达,接收方需要将数据重新排序;
  • 无连接不保证传输质量、不按顺序、不进行流量控制、不可恢复错误
  • 例如,IP、UDP、HTTP 协议是无连接的;

1.2. 面向连接

  • 通信双方在通信时需要建立一条通信线路;
  • 面向连接的通信,过程包括建立连接、使用连接、释放连接三个过程;
  • 在分组交换通信过程中,信道理论上永远不会断;
  • 面向连接保证传输质量、按顺序传送、有流量控制、可恢复错误
  • 例如 TCP 协议、电话系统是面向连接的可靠传输。

1.3. Http 协议无连接

  • Http 协议无连接,指的是服务器限制每次连接客户端 只处理一个请求。服务器处理完用户请求,并收到客户端应答以后,随即断开连接;
  • Http 协议之所以设计为无连接,是为了将 Http 协议设计成请求时建立连接、请求完释放连接,以尽快将资源释放出来服务器其他客户端;

1.4. Http 无连接与 Keep-Alive 功能

  • 随着网页越来越复杂,无连接模式越来越低效,Keep-Alive 被踢出来用于解决这个问题;
  • Keep-Alive 功能使客户端到服务器的连接长期有效,当客户端后粗访问服务器的时候,Keep-Alive 避免了重建连接;

    注意: Keep-Alive 影响了服务器的性能,因为在处理暂停期间,服务器上本来可以被释放资源仍旧被占用,当 Web 服务器和 Application 服务器在同一台机器上运行的时候,Keep-Alive 对功能资源的占用影响尤为突出。

2. 无状态概念

2.1. 状态的含义

  • 服务器是否具有数据储存功能;
  • 判断依据是指两个来自相同发起者的请求在服务器端是否具有上下文关系。

2.2. 无状态的含义

  • 同一个 URL 请求没有上下文关系;
  • 协议对事务处理没有记忆能力;
  • 每次请求都是相互独立的,它的执行结果与之前的请求和之后的请求是没有直接关系的,不会受之前的请求应答结果直接影响,也不会影响到后面的请求的应答;
  • 服务器中没有保存客户端的状态,客户端每次必须带上自己的额状态区请求服务器。

2.3. 网络协议状态

  • IP 是无状态的,IP 协议只负责把数据包发送到指定 IP,不会考虑前面是否已经发生过数据包,也不考虑后面还会不会发送数据包;
  • TCP 是有状态的,通过包头中的控制字段表明各个包之间的关系,从而做到可靠传输。同时,TCP 是面向连接的,TCP 通过“三次握手”确保对方存在,并未有状态的连接做准备;
  • UDP 是无状态的,做不到可靠传输,也不需要建立连接;
  • HTTP 是无状态的,HTTP 底层是 TCP(有状态),但是每次 HTTP 请求之间是没有任何关系的;

2.4. Http 无状态

  • 服务器没有保存客户端的状态信息;
  • 客户端每次必须带上去哪个自己的状态向服务器发送请求,比如借助于 cookie 或 session 发起访问。

    注意: HTTP 之所以设计出无状态的,原因是: – HTTP 协议下同一个 URL 对应同一个超文本,这对所有的访问请求来说都是一样的,没有必要设计成有状态的; – 另外,无状态下服务器的资源很快被释放,应答速度会更快;

  • 随着用户需求和技术的发展,静态网页上逐渐增加了许多动态生成的内容,HTML 语法增加了 Form 表单等,浏览器也增加了 Dom 等功能,HTTP 协议无状态属性严