http keep-alive 和 tcp keepalive

http keep-alive

http1.0中,connect 请求头的值是close

Connection: close

从http1.1协议开始,http request header 中connection的值默认为keep-alive。

Connection: keep-alive

这意味着,http client可以复用一个连接来多次发起请求或接收消息。http client 向 http server 发起一个请求,建立一个新的连接,http server 根据请求头中的 Connection: keep-alive,在返回消息后并不会立即断开连接(本次http请求所建立tcp连接),而是等待一段时间关闭tcp连接。在这段时间内,http client 可以在这个tcp连接上继续发送请求。

等待时长timeout的值可以在http client和http server中指定。比如在请求头(request header)中加入:

Keep-Alive: timeout=5, max=1000

表示让http server保持连接5秒钟,本次连接最大请求数1000次。如果http server也设置来http keep alive 的timeout值,那么以两者最小的时间为准。比如http server设置了timeout=3,则会在返回头(response header)中添加:

Keep-Alive: timeout=3, max=1000

这次连接会在接收到最后一次请求后的3秒钟,被http server断开。

tcp keepalive

tcp keepalive 和 http keep-alive完全不是一回事儿。
tcp keepalive 指的是 一端通过发送小的数据包(packets)给另一端,来保持tcp连接的连接状态。通过keepalive探测( keepalive probe),可以

  • 检测对方是否存活(Checking for dead peers)
  • 防止网络失效造成的传输中断(Preventing disconnection due to network inactivity)

tcp keepalive 详情可参考这里

update

2020-04-19

more about http keepalive

https://www.nginx.com/blog/http-keepalives-and-web-performance/

nginx确实支持HTTP Keep-alive功能,这使得浏览器可以利用同一个连接发送多个请求并接收响应,提高了网络通信效率,减少了建立TCP连接的成本。 ### HTTP Keep-alive详解 HTTP Keep-alive,也称为持久连接,允许客户端(通常是Web浏览器)在完成了一个HTTP请求之后,继续保持与服务器的连接状态一段时间。这样做的目的是为了减少建立新连接所需的时间,同时也可以让服务器在同一连接上处理后续的请求,从而提高性能和减少资源消耗。 ### Nginx如何实现Keep-alive 在Nginx配置文件中,默认情况下已经启用了Keep-alive功能。你可以通过`proxy_http_version 1.1;`和`http { keepalive_timeout 50s;}`这样的指令来调整HTTP版本以及Keep-alive超时时间等设置。 - `proxy_http_version 1.1;`用于启用HTTP/1.1协议,这是启用Keep-alive的关键之一。 - `keepalive_timeout 50s;`表示当无数据传输超过50秒后关闭连接。 ### 开启和调整Keep-alive 如果你需要调整默认设置,例如增加Keep-alive的超时时间或者优化资源管理,可以在`server`块或者全局`http`块中添加上述指令: ```nginx http { # 其他配置... proxy_http_version 1.1; keepalive_timeout 60s; # 设置为60秒作为示例 } server { # 其他服务器特定配置... } ``` ### 相关问题: 1. **HTTP Keep-alive对服务器资源的影响是什么?** - 使用HTTP Keep-alive可以帮助服务器更高效地管理连接,减少连接建立和断开带来的系统开销,尤其是在高并发访问的情况下更为明显。 2. **如何在Nginx配置文件中禁用HTTP Keep-alive?** - 可以将`keepalive_timeout`值设为0秒,并关闭`proxy_http_version`为1.1的功能。但这可能会导致浏览器尝试使用HTTP/1.0连接,这通常不会保持连接,除非有额外的脚本或配置来实现这一目标。 3. **为何在某些场景下需要禁用HTTP Keep-alive?** - 禁用HTTP Keep-alive可能出于安全、性能或其他特定需求考虑,比如: - 需要防止长时间占用连接影响其他流量,特别是在有流量控制限制的网络环境。 - 某些服务可能需要明确地清理每个会话的资源,禁止共享连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值