HTTP 1.1相比于HTTP 1.0有20秒的延迟。

4
我已经用C语言编写了一个程序,可以向Web服务器发送HTTP 1.1 POST请求。使用wireshark监控时,服务器的响应时间不到一秒钟,就会收到HTTP/1.1 200 OK的消息。但是,接下来需要等待20秒才能收到FIN、ACK数据包,我认为这是导致recv返回0(表示没有更多数据)的原因。这使得我的程序在等待服务器发送FIN、ACK数据包的20秒内挂起。
我已经测试过HTTP 1.0,没有延迟出现。因此,我认为这是因为HTTP 1.1默认将所有连接视为持久连接所致。但是,我的Web浏览器使用HTTP 1.1没有延迟,所以我认为我的做法有些问题。
我的一个想法是,我应该在等待recv返回0之前,采取其他方法检查文档是否已经结束,但是我想不出任何方法来实现这一点。
如果有人能够解释一下正确的做法是什么,谢谢你们提前帮忙。

我认为我们需要看一些代码...你是如何打开和服务套接字的?你有使用什么套接字选项吗? - nhed
1个回答

6

HTTP 1.1默认使用持续连接,而1.0不会。您可以通过在头部添加请求来要求非持续连接。

Connection: close

这个指令告诉服务器在完成请求后立即关闭连接。


这样修复了延迟问题,但如果我想利用保持连接的功能怎么办?在停止调用 recv 之前,我如何知道是否已经接收到了所有应该接收的数据? - Josh
4
现在,你将要根据Content-Length头或解码分块编码信息来完成此操作。 - johannes
简而言之,正确处理HTTP 1.1要复杂得多。 - morningstar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接