【发布时间】:2021-12-12 11:59:59
【问题描述】:
我有一个使用原始 C 的简单 Web 服务器,它尝试实现 HTTP 1.1 的“保持活动”功能。但是,如果客户端没有指定额外的信息,有没有办法知道服务器应该等待多长时间?下面是关于来自浏览器的 HTTP GET 请求以获取localhost:9999/ 以及来自服务器的响应的示例。浏览器在第一个请求之后不会发送任何额外的请求,但服务器仍然必须保持连接打开。
//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>
在这种情况下,服务器接下来应该做什么?它应该忽略连接(并在一段时间后关闭它)还是要求客户端关闭它?
【问题讨论】:
标签: c linux sockets http server