gpt4 book ai didi

c - 在 c 中编写一个具有连接持久性支持的 http 服务器

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:48 28 4
gpt4 key购买 nike

当我从浏览器读取一个请求时,HTTP 连接 header 总是带有一个Keep-Alive 值,所以我在写了一个之后保持连接套接字描述符打开对流的响应。我听说这会导致客户端(浏览器)将重用相同的连接来发送下一个请求。

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

为什么浏览器会在每个 header 中发送 keep-alive 选项?

最佳答案

the client sends another connect() request to create a new connection for sending the next request.

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

  • 默认行为是 Connection: close 除非发送了 Connection: keep-alive 响应 header (如果客户端发送 Connection: keep-alive 请求 header !)。如果您不发送,客户端将别无选择,只能关闭连接并每次都建立一个新连接。

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

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

无论哪种方式,如果在发送响应后连接将保持事件状态,请考虑还包含一个单独的 Keep-Alive响应 header 通知兼容的客户端连接何时超时,如果客户端在超时之前没有重新使用它,连接将被关闭(然后确保在您的服务器代码中实际实现该超时)。例如:

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

why do browsers send keep-alive option with every header?

因为它是每个请求的特性。任何请求都可以要求保持连接,服务器每次都必须确认它。一旦连接关闭,它就消失了。

关于c - 在 c 中编写一个具有连接持久性支持的 http 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35355001/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com