HTTP Keep Alive和TCP保持活跃状态

时间:2012-02-17 19:45:37

标签: http tcp

如何实施HTTP Keep Alive?它内部是否使用TCP Keep Alive?如果没有,服务器如何检测客户端是死还是活?

4 个答案:

答案 0 :(得分:54)

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

  • HTTP Keep-Alive是一种允许HTTP客户端(通常是浏览器)和服务器(webserver)通过同一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连接发送请求。

答案 1 :(得分:20)

HTTP Keep-Alive是HTTP协议的一项功能。实现Keep-Alive功能的Web服务器必须定期检查连接/套接字(对于传入的HTTP请求),因为它发送了最后一个HTTP响应(如果有相应的HTTP请求)。如果在配置的保持活动时间(秒)之前未收到HTTP请求,则Web服务器将关闭连接。 Web Server完成“关闭”后,无法再进行HTTP请求。另一方面,TCP Keep-Alive由TCP层中的OS管理。 HTTP Keep-Alive和TCP Keep-Alive完全不相关。

答案 2 :(得分:1)

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/

答案 3 :(得分:-2)

http keep-alive只是让tcp活得更长,以便传输多个http请求。保持活动超时后,tcp连接将被关闭。 tcp keep-alive只是保持tcp连接的机制,或者检查tcp连接是否未关闭