C套接字HTTP 1.1持久连接服务器何时应该关闭套接字?



我有一个使用原始C的简单web服务器,它试图实现"keep-alive";HTTP 1.1特性。但是,如果客户端没有指定额外的信息,是否有办法知道服务器应该等待多长时间?下面是关于从浏览器获取localhost:9999/的HTTP GET请求和来自服务器的响应的示例。在第一个请求之后,浏览器不会发送任何额外的请求,但服务器仍然必须保持连接打开。

//request
GET / HTTP/1.1
Host: localhost:9999
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

//response
HTTP/1.1 200 OK
Content-Type: text/html
<html><head><style>body{font-family: monospace; font-size: 14px;}td {padding: 2px 7px;}</style></head><body><table>
<tr><td><a href="ctpl.h">ctpl.h</a></td><td>2021-10-27 09:38</td><td>9.8K</td></tr>
<tr><td><a href="M_files/">M_files/</a></td><td>2021-10-24 16:23</td><td>[DIR]</td></tr>
</table></body></html>

在这种情况下,服务器下一步应该做什么?它应该忽略连接(并在一段时间后关闭它)还是要求客户端关闭它?

但是服务器仍然需要保持连接打开。

HTTP keep-alive不强制连接保持打开状态。客户端和服务器都可以在任何时间关闭空闲连接,即在请求和响应完成后。

客户端和服务器都可以从保持连接打开中获益,因为这减少了新请求的开销。但是保持过多的连接打开也会产生成本,特别是在服务器上,因为这会消耗内存和其他资源。因此,服务器通常会在一段时间后或达到某些资源限制时关闭空闲连接。

…或者要求客户端关闭

服务器没有办法请求客户端,除非启动TCP关闭。

最新更新