我在C中编写了一个向网络服务器发送HTTP 1.1 POST
请求的程序
使用wireshark监视它,服务器响应并获取HTTP/1.1 200 OK
消息需要不到一秒的时间,但是然后需要另外20秒来获取FIN, ACK
数据包,我相信这是什么导致recv
返回0,指定不再有数据。
导致我的程序挂起20秒,等待服务器发送FIN, ACK
数据包。
我用HTTP 1.0
对此进行了测试,没有延迟。所以我认为这是因为默认情况下HTTP 1.1
会将所有连接视为persistent connections
但我的网络浏览器使用HTTP 1.1
并且没有延迟,所以我认为我做的不对。
我有一个想法,而不是等待recv
返回0,我应该检查我是否在文档的末尾以其他方式,但我想不出有任何办法这样做
所以如果有人能向我解释我应该怎么做呢?提前谢谢。
答案 0 :(得分:6)
HTTP 1.1默认为keep-alive连接,而1.0不支持。您可以通过添加标题
来请求非保持活动状态Connection: close
指示服务器在连接完成后立即关闭连接。