用 c 编写具有连接持久性支持的 http 服务器



当我从浏览器读取请求时,HTTP 连接标头始终带有一个Keep-Alive值,因此我在向流写入响应后保持连接套接字描述符打开。我听说这会导致客户端(浏览器(将重用相同的连接来发送下一个请求。

但是客户端发送另一个connect()请求以创建新连接以发送下一个请求。

为什么浏览器会keep-alive每个标题发送选项?

客户端发送另一个 connect(( 请求以创建一个新连接来发送下一个请求。

如果要向 HTTP 1.0/1.1 请求发送 HTTP 1.0 响应:

  • 默认行为是Connection: close除非发送Connection: keep-alive响应标头(当客户端发送Connection: keep-alive请求标头时! 如果您不发送该连接,客户端将别无选择,只能关闭连接并每次创建一个新连接。
如果要向 HTTP 1.1

请求发送 HTTP 1.1 响应:

  • 除非发送Connection: close响应标头,否则默认行为Connection: keep-alive,因此请确保除非客户端发送Connection: close请求标头,否则不会发送该标头,或者有意关闭连接。

无论哪种方式,如果在发送响应后连接将保持活动状态,请考虑还包括一个单独的Keep-Alive响应标头,以通知兼容的客户端连接何时超时,如果客户端在超时之前未重用连接,则连接何时关闭(然后确保在服务器代码中实际实现该超时(。 例如:

Connection: keep-alive
Keep-Alive: timeout=300

为什么浏览器会为每个标头发送保持活动状态选项?

因为它是按请求的功能。 任何请求都可以要求保持连接活动状态,并且服务器每次都必须确认它。一旦连接关闭,它就会消失。

最新更新