HTTP 1.0服务器何时关闭连接?

11
背景:我正在尝试在自定义服务器上使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: */*
(重复次数超出我计算的范围)
我假设,正如RFC 1945所述:“除实验应用程序外,当前惯例要求客户端在每个请求之前建立连接,并由服务器在发送响应后关闭连接。”当我请求一个页面时,这适用于ApacheBench。但是,如果我将请求数量增加到10,我会收到“对等方重置连接”的错误消息。考虑到我关闭了连接,这是有道理的。
我尝试了相同的过程与Google一起进行,然而,在这两种情况下都可以正常工作。那么,我应该如何知道何时关闭HTTP 1.0的连接呢?
1个回答

35

在HTTP 0.9中,服务器在发送响应后总是会关闭连接。客户端必须在接收到响应后关闭其连接。

在HTTP 1.0中,服务器在发送响应后总是会关闭连接除非客户端发送了一个Connection: keep-alive请求头并且服务器发送了一个Connection: keep-alive响应头。如果不存在这样的响应头,则客户端必须在接收到响应后关闭其连接。

在HTTP 1.1中,服务器在发送响应后不会关闭连接除非客户端发送了一个Connection: close请求头,或者服务器发送了一个Connection: close响应头。如果存在这样的响应头,则客户端必须在接收到响应后关闭其连接。


但是正如您所看到的,客户端没有发送Keep-Alive头,那么发生了什么? - chacham15
在HTTP 1.0中,如果没有明确请求保持连接,则客户端必须在接收到响应后关闭连接,即使服务器在发送响应后没有关闭连接。 - Remy Lebeau
@RemyLebeau,Chrome的旋转“加载圆圈”是否意味着在从服务器接收响应后客户端和服务器之间的连接仍然打开? - gkiko
1
@gkiko:我不能回答那个问题。我不用 Chrome,也不知道它的操作方式。 - Remy Lebeau

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