### HTTP 长连接和短连接的区别 **什么是 HTTP 短连接?** **HTTP 短连接**指的是浏览器和服务器每进行一次 HTTP 操作(如获取一个 HTML 文件、一张图片或一个 CSS 文件),就建立一次 TCP 连接,传输完毕后立即断开连接 **工作流程:** 1. **建立连接**:客户端(浏览器)向服务器发起 TCP 连接(三次握手) 2. **发送请求**:客户端发送 HTTP 请求 3. **发送响应**:服务器发送 HTTP 响应 4. **断开连接**:服务器和客户端立即断开 TCP 连接(四次挥手) 5. **重复**:如果客户端还需要请求其他资源,就必须重复上述所有步骤 **特点:** - **优点**:实现简单,服务器在请求处理完毕后立即释放资源,适合请求频率较低的场景 - **缺点**: - **性能开销大**:每次请求都需要经过 TCP 三次握手和四次挥手,这会增加大量的网络延迟 - **资源消耗高**:大量的连接建立和断开操作会消耗服务器和客户端的 CPU 和内存资源 **什么是 HTTP 长连接?** **HTTP 长连接**(也称作 **HTTP Keep-Alive** 或 **HTTP Persistent Connection**)指的是浏览器和服务器建立 TCP 连接后,在一次请求/响应完成后,不会立即断开连接,而是保持连接状态。后续的请求和响应可以在这个已建立的连接上继续进行 **工作流程:** 1. **建立连接**:客户端向服务器发起 TCP 连接(三次握手) 2. **发送请求**:客户端发送 HTTP 请求 3. **发送响应**:服务器发送 HTTP 响应 4. **保持连接**:连接保持打开状态 5. **重复**:客户端继续在这个连接上发送下一个请求,直到客户端或服务器决定关闭连接 6. **断开连接**:当某个条件满足时(例如达到超时时间或请求数量上限),连接才会断开 **特点:** - **优点**: - **性能更高**:省去了大量的 TCP 连接建立和断开的开销,显著减少了网络延迟 - **资源利用率高**:减少了服务器的 CPU 和内存资源消耗 - **缺点**: - **资源占用**:服务器需要为每个活跃的连接维护状态,如果连接数量过多,可能会占用大量服务器资源 - **实现复杂**:服务器端需要更精细的超时管理机制 | 特性 | 短连接 (Non-Persistent) | 长连接 (Persistent) | | --------- | --------------------------- | -------------------------------------------- | | 连接管理 | 一次请求/响应后立即断开 | 保持连接,重复利用 | | TCP 开销 | 高(每次请求都需建立/断开) | 低(只在首次建立和最后断开) | | 性能 | 低,网络延迟高 | 高,传输效率更高 | | 应用场景 | 访问频率低的静态网页 | 频繁请求、动态内容多的网站,如电商、社交媒体 | | HTTP 版本 | HTTP/1.0 默认 | HTTP/1.1 默认开启 |