HTTP 1.0服务器什么时候关闭连接?

时间:2013-07-03 00:34:05

标签: http

背景:我正在尝试让ApacheBench在我的自定义服务器上运行。我尝试发出ab -n 1 -c 1 http://localhost:1337/index.html并且我嗅探连接(使用wireshark)我看到有多个请求被发送。

示例请求:

GET /index.html HTTP/1.0
Host: localhost:1337
User-Agent: ApacheBench/2.3
Accept: */*

(repeats more times than I care to count)

我假设RFC 1945说“除了实验性应用程序,当前的做法要求在每次请求之前由客户端建立连接,并在发送响应后由服务器关闭。”当我请求一个页面时,这适用于ApacheBench。但是,如果我将请求数增加到10,我会得到“由同行重置连接”。考虑到我关闭了连接,这是有道理的。

然而,我尝试了与谷歌相同的程序,并且在两种情况下它都可以正常工作。那么,我怎么知道何时关闭HTTP 1.0的连接?

1 个答案:

答案 0 :(得分:17)

在HTTP 0.9中,服务器始终在发送响应后关闭连接。客户端必须在收到响应后关闭其连接的末尾。

在HTTP 1.0中,服务器始终在发送响应 UNLESS 后关闭连接,客户端发送了Connection: keep-alive请求标头,服务器发送了Connection: keep-alive响应标头。如果不存在此类响应头,则客户端必须在收到响应后关闭其连接的末尾。

在HTTP 1.1中,服务器在发送响应后没有关闭连接 UNLESS 客户端发送了Connection: close请求标头,或者服务器发送了Connection: close响应头。如果存在这样的响应头,则客户端必须在收到响应后关闭其连接的末尾。