HTTP Keep Alive和TCP保持活跃状态

Bru*_*uce 44 tcp http

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

joh*_*odo 58

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

  • HTTP Keep-Alive是一种允许HTTP客户端(通常是浏览器)和服务器(webserver)通过同一TCP连接发送多个请求/响应对的功能.这减少了第二,第三,...... HTTP请求的延迟,减少了网络流量等.

  • TCP keepalive是一个完全不同的野兽.它通过发送小数据包保持TCP连接打开.此外,当发送数据包时,这将作为检查,因此一旦连接断开就会通知发送方(注意事实并非如此 - 直到我们尝试通过TCP连接进行通信,我们不知道它是否正常).

回答有关HTTP Keep-Alive的问题:

How is HTTP Keep Alive implemented? 
Run Code Online (Sandbox Code Playgroud)

简单地说,HTTP服务器在每次响应后都不会关闭TCP连接,但是如果其他一些HTTP请求也会等待它,则会等待一段时间.在一些超时之后它无论如何都会关闭它.

Does it internally use TCP Keep Alive? 
Run Code Online (Sandbox Code Playgroud)

不,至少我认为没有任何意义.

If not, how does the server detect if the client is dead or alive?
Run Code Online (Sandbox Code Playgroud)

它没有 - 它不需要.如果客户端发送请求,它将获得响应.如果客户端没有通过TCP连接发送任何内容(可能是因为连接已经死亡),那么超时将关闭连接; 客户端当然会注意到这一点,并在需要时通过另一个TCP连接发送请求.


Ayu*_*yub 24

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完全不相关.