HTTP保持连接和TCP保持连接

76

HTTP Keep Alive是如何实现的?它是否内部使用TCP Keep Alive?如果不是,服务器如何检测客户端是否存活?

4个回答

95

我知道这是一个老问题,但仍然:

  • HTTP Keep-Alive 是一个功能,允许 HTTP 客户端(通常是浏览器)和服务器(Web 服务器)在同一个 TCP 连接上发送多个请求/响应对。这减少了第二个、第三个等 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连接发送请求。


41

HTTP Keep-Alive 是 HTTP 协议的一个特性。实现 Keep-Alive 特性的 Web 服务器需要定期检查连接/套接字(用于传入的 HTTP 请求)自上次发送 HTTP 响应以来经过的时间范围(如果存在相应的 HTTP 请求) 。如果在配置的 Keep-Alive 时间(秒)内未收到任何 HTTP 请求,则 Web 服务器关闭连接。在 Web 服务器进行“关闭”之后,将无法再进行进一步的 HTTP 请求。另一方面,TCP Keep-Alive 在 TCP 层中由操作系统管理。HTTP Keep-Alive 和 TCP Keep-Alive 是完全不相关的事情。


3

HTTP keep-alive,又称为HTTP持久连接,是一种指令,允许单个TCP连接保持打开状态以进行多个HTTP请求/响应。

默认情况下,HTTP连接在每个请求后关闭。当有人访问您的站点时,他们的浏览器需要创建新的连接来请求组成您网页的所有文件(例如:图像、JavaScript和CSS样式表),这个过程可能导致页面加载时间长。

enter image description here

启用keep-alive标题可以通过一个连接提供所有网页资源。Keep-alive还减少了服务器上的CPU和内存使用。

来源:https://www.imperva.com/learn/performance/http-keep-alive/


-1
HTTP keep-alive 是为了在传输多个 HTTP 请求时让 TCP 连接保持更长时间而存在的。在 keep-alive 超时后,TCP 连接将被关闭。 TCP keep-alive 仅仅是一种保持 TCP 连接或检查 TCP 连接是否关闭的机制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接