如何实施HTTP Keep Alive?它内部是否使用TCP Keep Alive?如果没有,服务器如何检测客户端是死还是活?
答案 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 样式表),这一过程可能会导致页面加载时间过长。
启用 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连接是否未关闭