8

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

示例请求:

获取 /index.html HTTP/1.0
主机:本地主机:1337
用户代理:ApacheBench/2.3
接受: */*

(重复的次数比我想数的还要多)

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

但是,我在 Google 上尝试了相同的程序,并且在这两种情况下都可以正常工作。那么,我应该如何知道何时关闭 HTTP 1.0 的连接?

4

1 回答 1

30

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

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

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

于 2013-07-03T00:53:51.913 回答