本文目录导读:

HTTP/1.1 默认就是持久连接(Persistent Connection),也叫 Keep-Alive,这是它与 HTTP/1.0 的一个关键区别。
HTTP/1.1 允许在同一个 TCP 连接上发送和接收多个 HTTP 请求/响应,而不是每个请求都重新建立和关闭连接。
核心实现机制
-
默认行为(无需额外头)
- 在 HTTP/1.1 中,所有连接默认都是持久的,除非明确使用
Connection: close头来关闭它。 - 服务器发送完响应后,不会主动断开 TCP 连接,它会等待客户端在这个连接上发送下一个请求。
- 在 HTTP/1.1 中,所有连接默认都是持久的,除非明确使用
-
显式标志(可选但推荐)
- 虽然默认是持久连接,但客户端和服务器仍然可以通过
Connection: keep-alive头来显式声明。 - 但更重要的是,HTTP/1.1 引入了一个更精确的控制头:
Keep-Alive。keep-alive: timeout=5, max=100表示:timeout=5:服务器希望这个空闲连接最多保持 5 秒。max=100:服务器希望在这个连接上最多处理 100 个请求后关闭。
- 虽然默认是持久连接,但客户端和服务器仍然可以通过
-
如何判断请求/响应结束(防止死等)
- 持久连接的关键挑战是:客户端如何知道一个响应数据已经完整发送完毕,以便解析它并发送下一个请求?
- HTTP/1.1 主要依赖
Content-Length和Transfer-Encoding: chunked。- Content-Length:响应头中明确告诉客户端数据长度(以字节为单位),客户端读到这个长度的数据后,就知道响应结束。
- Transfer-Encoding: chunked:如果服务器无法提前知道数据长度(例如动态生成的数据,如数据库查询、实时流),会使用这种编码,它将数据分成一个个“块”(chunk),每个块前面有该块的长度信息,最后以一个长度为 0 的块结束。
- 这两种机制都不需要关闭连接就能明确标记数据边界,从而支持持久连接。
与 HTTP/1.0 的区别
| 特性 | HTTP/1.0 | HTTP/1.1 |
|---|---|---|
| 默认连接行为 | 非持久(每个请求一个 TCP 连接) | 持久(默认 keep-alive) |
| 启用持久连接 | 必须显式添加 Connection: keep-alive |
默认启用,可通过 Connection: close 禁用 |
| 效率 | 每次请求都需要 TCP 三次握手、慢启动,效率低 | 复用连接,减少握手和慢启动开销,效率高 |
| 数据传输 | 通常依赖 Content-Length 或关闭连接标记结束 |
支持 Content-Length 和 Transfer-Encoding: chunked |
为什么持久连接重要?
- 减少延迟:避免了每个请求都进行 TCP 三次握手和四次挥手的时间。
- 提高网络利用率:减少了 TCP 连接的建立/关闭次数,以及由此产生的网络拥塞。
- 支持管道化(Pipelining):虽然实际中很少用(已被 HTTP/2 的多路复用取代),但持久连接是 HTTP/1.1 管道化的基础。
- 资源开销更低:服务器和客户端不需要为每个请求维护大量连接,节省了 CPU 和内存。
HTTP/1.1 实现持久连接的核心是:
- 默认行为:连接默认保持打开。
- 明确边界:依靠
Content-Length或Transfer-Encoding: chunked来界定每次请求/响应的边界,无需关闭连接。 - 控制头:通过
Connection: close放弃持久化,或通过Keep-Alive头微调超时和最大请求数。
如果你在使用 HTTP/1.1(比如浏览网页、调用 REST API),实际上已经自动享受了持久连接带来的性能提升。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播