2013-07-03 50 views
4

背景:我试图让ApacheBench在我的自定义服务器上工作。我试着发行ab -n 1 -c 1 http://localhost:1337/index.html,我嗅探连接(与wireshark)我看到wayyy不止一个请求被发送。HTTP 1.0服务器何时关闭连接?

实施例要求:

 
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,则会收到“由对等方重置连接”。考虑到我关闭了连接,这是有道理的。

但是,我尝试了与Google相同的过程,并且它在这两种情况下均正常工作。那么,我该如何知道何时关闭HTTP 1.0的连接呢?

回答

13

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

在HTTP 1.0中,服务器总是关闭发送响应除非客户端发送的请求Connection: keep-alive报头和所述服务器发送的响应Connection: keep-alive报头之后的连接。如果不存在这样的响应报头,则客户端在收到响应后必须关闭连接的结束。

在HTTP 1.1中,服务器不关闭发送响应除非客户端发送的请求Connection: close标头或服务器发送的响应Connection: close报头之后的连接。如果存在这样的响应头,则客户端在收到响应后必须关闭连接的结束。

+0

但正如你所看到的,客户端没有发送Keep-Alive标题,所以发生了什么? – chacham15

+0

如果没有保持活动状态(必须在HTTP 1.0中明确请求),则客户端**必须在收到响应后关闭连接,即使服务器在发送响应后未关闭连接。 –

+0

@RemyLebeau做Chrome的旋转_loading circle_意味着即使在收到服务器的响应之后,客户端服务器之间的连接仍然是开放的? – gkiko