HTTP/1.1请求默认隐式保持连接吗?

20
已解决:在这里粘贴字节让我意识到我在块之间漏掉了空行...

HTTP / 1.1请求是否需要指定Connection:keep-alive头部,还是默认情况下始终保持活动连接?

这份指南让我认为应该是这样的;当我的HTTP服务器收到一个1.1请求时,除非显式接收到Connection:close头部,否则它会保持活动状态。

我问这个问题是因为我的不同客户端的行为,abhttperf的差异已经足以让我疯狂到怀疑自己的理智...


这是httperf --hog --port 42042 --print-reply body发送的内容:

GET / HTTP/1.1
User-Agent: httperf/0.9.0
Host: localhost

这是我的服务器响应:

HTTP/1.1 200 OK
Connection: keep-alive
Transfer-Encoding: chunked
Content-Length: 18

12
Hello World      1
0

httpref迅速打印出响应,但接着就一直停留在那里,双方都没有关闭连接,httpref也没有退出。

我的bug在哪里?


1
是的,保持连接是HTTP/1.1的默认设置。 - Benjie
2
分块编码中的内容长度并没有太多意义。 - nurettin
1个回答

27

来自RFC 2616第8.1.2节

HTTP/1.1与之前版本的HTTP之间一个重要的区别是任何HTTP连接的默认行为都是持久连接。也就是说,除非另有指示,客户端应该认为服务器将维护一个持久连接,即使在服务器返回错误响应后。


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