HTTP的连接
文章目录HTTP的连接概述连接的生命周期连接过程HTTP/1.0-非持久连接HTTP/1.1-持久连接HTTP/2-多路复用HTTP的连接概述HTTP 连接指客户端与服务器之间通过 HTTP 协议建立的通信管道。这个连接本质是基于 TCP 协议的用于传输 HTTP 请求和响应数据。连接的生命周期建立连接TCP 三次握手发送请求客户端发送 HTTP 请求处理请求服务器处理请求发送响应服务器返回 HTTP 响应关闭连接根据连接类型决定是否关闭连接过程HTTP 连接建立在 TCP 连接之上首先需要完成 TCP 三次握手客户端 服务器 │ │ │ 1. SYN (同步) │ │─────────────────────────────│ │ │ │ 2. SYN-ACK (同步确认) │ │─────────────────────────────│ │ │ │ 3. ACK (确认) │ │─────────────────────────────│ │ │ │ 连接建立完成 │ │ │HTTP/1.0-非持久连接每次请求都需要建立新连接每个 TCP 连接只能处理一个请求/响应连接在响应后立即关闭缺点高延迟每个连接需要 TCP 握手开销大频繁创建销毁连接队列阻塞请求必须按顺序处理GET /index.html HTTP/1.0 Host: example.com HTTP/1.0 200 OK Content-Type: text/html Connection: closeHTTP/1.1-持久连接默认持久连接keep-alive单个 TCP 连接可以处理多个请求/响应通过 keep-alive 控制超时和最大请求数每个连接在同一时间只能处理一个请求/响应优点避免频繁创建销毁连接缺点连接数有限制每个域名大致 6-8 个连接请求按顺序执行GET /index.html HTTP/1.1 Host: example.com Connection: keep-alive HTTP/1.1 200 OK Content-Type: text/html Connection: keep-alive Keep-Alive: timeout5, max100HTTP/2-多路复用单个 TCP 连接处理所有请求通过帧和流实现多路复用单个连接可以承载所有请求并行处理无阻塞无序传输客户端 服务器 │ │ │ 1. 建立单个TCP连接 │ │─────────────────────────────│ │ │ │ 2. 同时发送多个请求的帧 │ │ Stream 1: 请求A的头部帧 │ │ Stream 3: 请求B的头部帧 │ │ Stream 5: 请求C的数据帧 │ │─────────────────────────────│ │ │ │ 3. 服务器并发处理并返回响应 │ │ Stream 1: 响应A的数据帧 │ │ Stream 3: 响应B的头部帧 │ │ Stream 5: 响应C的数据帧 │ │─────────────────────────────│ │ │ │ 4. 客户端重组各流的完整响应 │ │ 按Stream ID重新组装成完整响应 │ │ │HTTP/1.1 场景请求A: [ 3秒 ] 完成 请求B: [ 3秒 ] 完成 请求C: [ 3秒 ] 完成 总耗时9秒HTTP/2 场景请求A: [1秒] [1秒] [1秒] 完成 请求B: [1秒] [1秒] [1秒] 完成 请求C: [1秒] [1秒] [1秒] 完成 总耗时3秒理想情况下