HTTP/1.0认识

0 阅读2分钟

HTTP/1.0 短连接全过程图

1.png

阶段一:建立 TCP 连接 (三次握手)

在发送任何 HTTP 数据之前,客户端和服务器必须先建立一个可靠的 TCP 连接。这个过程被称为“三次握手”。

  1. 第一次握手 (SYN) :客户端向服务器发送一个 SYN 报文,表示“我想和你建立连接”。
  2. 第二次握手 (SYN/ACK) :服务器收到 SYN 后,会回复一个 SYN/ACK 报文,表示“好的,我同意建立连接”。
  3. 第三次握手 (ACK) :客户端收到服务器的同意后,再回复一个 ACK 报文。至此,TCP 连接建立成功,双方可以开始传输数据。

阶段二:HTTP 请求与响应

TCP 连接建立后,真正的 HTTP 通信才开始。

  1. 发送 HTTP 请求:客户端通过这个已经建立的连接,向服务器发送一个完整的 HTTP 请求报文(例如 GET /index.html)。
  2. 返回 HTTP 响应:服务器接收到请求,进行处理,然后通过同一个连接将 HTTP 响应报文(包含状态行、响应头和响应体,如 HTML 文件内容)返回给客户端。

阶段三:断开 TCP 连接 (四次挥手)

一旦这次 HTTP 请求-响应完成,TCP 连接就会被立即断开。这个过程被称为“四次挥手”。

  1. 第一次挥手 (FIN) :通常是客户端先发起关闭,发送一个 FIN 报文,表示“我的数据发完了,准备关闭连接”。
  2. 第二次挥手 (ACK) :服务器收到 FIN 后,先回复一个 ACK 报文,表示“收到你的关闭请求”。此时,从客户端到服务器的连接已经关闭,但服务器可能还有数据要发送。
  3. 第三次挥手 (FIN) :当服务器也处理完所有数据后,会向客户端发送一个 FIN 报文,表示“我也准备好了,可以关闭连接了”。
  4. 第四次挥手 (ACK) :客户端收到服务器的 FIN 后,回复一个 ACK 报文。至此,整个 TCP 连接被完全关闭。

想象一下,你要访问一个包含 10 张图片的网页。在 HTTP/1.0 的短连接模式下,浏览器需要:

  1. 为 HTML 文件本身,执行一次完整的“三次握手 -> 请求响应 -> 四次挥手”。
  2. 然后,再为 每一张 图片,重复执行一次完整的“三次握手 -> 请求响应 -> 四次挥手”。

这意味着,为了加载一个网页,网络需要经历 11 次连接建立和断开的过程。而建立和断开连接(握手和挥手)本身就需要消耗时间和网络资源(总共 7 个数据包),这造成了巨大的性能浪费。

正是为了解决这个问题,HTTP/1.1 才引入了 长连接(持久连接/Keep-Alive) ,允许在一个 TCP 连接上发送多个 HTTP 请求和响应,从而极大地提升了网页加载速度。