HTTP Keep-Alive 笔记

一、 核心含义

Keep-Alive就是HTTP长连接,让TCP连接复用,一次连好多次传数据,不用每次请求都重新握手断开。
对应HTTP1.0需手动加Connection:Keep-Alive开启,HTTP1.1默认开启(默认Connection:keep-alive)

二、 通俗理解

❌无Keep-Alive(短连接):像打电话,说一句挂一次,下次再说再拨号,又握手又断,麻烦还慢
✅有Keep-Alive(长连接):拨通一次不挂,一口气说完所有事,高效省资源

三、 工作原理

  1. 客户端发请求,头带Connection:keep-alive,告知服务端“别断连接”

  2. 服务端同意,响应头也返回Connection:keep-alive,同时带超时/最大请求数(如Keep-Alive: timeout=10, max=100)

  3. 本次请求响应完成,TCP连接不断开,后续同域名请求直接复用这个连接

  4. 超时无新请求/达到最大请求数,连接才断开

四、 核心优势(为啥要用)

✅ 减少TCP三次握手/四次挥手次数,降低服务器开销
✅ 减少延迟,后续请求不用等建立连接,响应更快
✅ 节省带宽,少传连接建立断开的额外报文

五、 注意事项&坑点

  1. HTTP1.1默认开,HTTP1.0默认关,需手动加请求头才生效

  2. 不是一直保持:服务端会设超时(timeout)和最大请求数(max),防止闲置占资源

  3. 长连接≠永久连接,超时/达到上限就断开,是“复用连接”不是“永不失联”

  4. 劣势:闲置时占服务器连接数,高并发下可能拖慢服务,需合理配置超时和最大数

  5. 关闭方式:请求头加Connection:close,强制用短连接

六、 关键补充(考点/实操用)

✅ 搭配管道化(Pipeline)更高效:一个长连接里,客户端可连续发多个请求,不用等前一个响应
✅ 抓包能看到:响应头有Keep-Alive字段,且多次请求的TCP端口一致,就是复用了
✅ 适用场景:网页多资源(图片/CSS/JS),一次打开需加载多个文件,用长连接超合适
✅ 不适用场景:单次请求、大文件下载(易占连接)、高并发短请求场景

posted @ 2025-12-30 22:26  李宜芯  阅读(4)  评论(0)    收藏  举报