我用 C 语言编写了一个程序,用于向 Web 服务器发送 HTTP 1.1 POST
请求。
使用 wireshark 对其进行监控,服务器响应并获得 HTTP/1.1 200 OK
消息所需的时间不到一秒,但随后又需要 20 秒才能获得 FIN, ACK
数据包,我相信这就是导致 recv
返回 0 的原因,没有指定更多数据。
导致我的程序挂起 20 秒,等待服务器发送FIN, ACK
数据包。
我已经使用 HTTP 1.0
对此进行了测试,没有延迟。所以我认为这是因为 HTTP 1.1
默认情况下将所有连接视为 持久连接
。
但是我的网络浏览器使用 HTTP 1.1
并且没有延迟,所以我认为我做的不对。
我的一个想法是与其等待 recv
返回 0,不如通过其他方式检查我是否在文档末尾,但我想不出任何方式做这个。
那么,如果有人可以向我解释我应该如何做呢?提前致谢。
最佳答案
HTTP 1.1 默认保持连接,而 1.0 则没有。您可以通过在 header 中添加来请求非保持事件状态
Connection: close
指示服务器在连接完成后立即关闭连接。
关于c - 与 HTTP 1.0 相比,HTTP 1.1 延迟 20 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7616938/