HTTP Keep Alive 是如何实现的?它内部使用 TCP Keep Alive 吗?如果没有,服务器如何检测客户端是死是活?
HTTP Keep-Alive 是 HTTP 协议的一个特性。实现 Keep-Alive Feature 的 Web 服务器必须定期检查连接/套接字(针对传入的 HTTP 请求) ,以确定自发送最后一个 HTTP 响应(如果有相应的 HTTP 请求)以来的时间跨度。如果在配置的保持活动时间(秒)之前没有收到 HTTP 请求,Web 服务器将关闭连接。在 Web 服务器完成“关闭”之后,将不再可能进一步的 HTTP 请求。另一方面,TCP Keep-Alive 由 TCP 层中的操作系统管理。HTTP Keep-Alive 和 TCP Keep-Alive 是完全不相关的东西。
我知道这是一个老问题,但仍然:
HTTP Keep-Alive 是一个允许 HTTP 客户端(通常是浏览器)和服务器(网络服务器)通过相同的 TCP 连接发送多个请求/响应对的特性。这减少了第2,第3,... HTTP 请求的延迟,减少了网络流量和类似情况。
TCP Keepalive 是完全不同的野兽。它通过发送小数据包来保持 TCP 连接的开放。另外,当数据包被发送的时候,这是一个检查,这样一旦连接中断,发送者就会得到通知(注意,事实并非如此——除非我们尝试通过 TCP 连接进行通信,否则我们不知道它是否正常)。
要回答有关 HTTP Keep-Alive 的问题:
How is HTTP Keep Alive implemented?
简单地说,HTTP 服务器不会在每次响应后关闭 TCP 连接,而是等待一段时间,如果其他 HTTP 请求也会通过它来访问。一段时间后,它关闭它反正。
Does it internally use TCP Keep Alive?
不,至少我觉得没必要。
If not, how does the server detect if the client is dead or alive?
没必要。如果客户端发送请求,它将获得响应。如果客户机没有通过 TCP 连接发送任何内容(可能是因为连接已死) ,那么超时将关闭连接; 客户机当然会注意到这一点,并在需要时通过另一个 TCP 连接发送请求。
Http keep-alive 只是为了传输多个 http 请求而延长 tcp 的生存时间。在保持活动超时后,tcp 连接将被关闭。 Tcp keep-alive 只是一种保持 tcp 连接的机制,或者检查 tcp 连接是否关闭
HTTP keep-alive,又名 HTTP持久链接,是一条允许单个 TCP 连接对多个 HTTP 请求/响应保持开放的指令。
默认情况下,HTTP 连接在每次请求后关闭。当有人访问你的网站时,他们的浏览器需要创建新的连接来请求构成你的网页的每个文件(例如图片、 Javascript 和 CSS 样式表) ,这个过程会导致高页面加载时间。
启用 keep-alive 头允许您通过单个连接提供所有网页资源。Keep-alive 还可以减少服务器上的 CPU 和内存使用。
资料来源: https://www.imperva.com/learn/performance/http-keep-alive/