使用 nc 测试 HTTP 管道,但只得到一个响应

使用 nc 测试 HTTP 管道,但只得到一个响应

我正在用 nc 测试 HTTP 流水线,

因此我创建了一个包含以下行的输入文件,

GET / HTTP/1.1
Host: localhost

GET / HTTP/1.1
Host: localhost

现在我用 nc 提交,

nc localhost 80 < test

但是我只收到了一个 HTTP 响应,这是怎么回事?而且 nc 只是在这里等待某事,它没有返回到控制台。

答案1

如果你希望能够在一个连接中提交多个请求,则需要保持活动状态:

GET / HTTP/1.1
Host: localhost
Connection: keep-alive

不幸的是,服务器并不总是必须遵从您的请求。它可能会回复Connection: closeConnection: keep-alive。如果它回复前者,您就无法通过管道传输请求,并且需要使用两个连接。由于通过管道传输某些内容到 netcat 无法做出这样的决定,因此您可能只想保持安全并使用两个连接。

答案2

问题可能出在你的 HTTP 服务器上。不是每个服务器都支持流水线。Libevent才不是例如(libevhtp 是正在修复为了它)。

我使用 nginx HTTP 服务器进行 nc 和流水线操作没有任何问题:

$ echo -en "GET / HTTP/1.1\r\nHost: fropl.com\r\n\r\nGET / HTTP/1.1\r\nHost: fropl.com\r\n\r\n" | nc localhost 80
HTTP/1.1 401 Unauthorized
Server: nginx/1.2.1
Date: Sat, 08 Jun 2013 21:38:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
WWW-Authenticate: Basic realm="frople"

HTTP/1.1 401 Unauthorized
Server: nginx/1.2.1
Date: Sat, 08 Jun 2013 21:38:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
WWW-Authenticate: Basic realm="frople"

附言:可以使用 telnet 或 Perl如果你怀疑nc。

相关内容