2

我有以下 perl 脚本通过单一 tcp 连接发送流水线 http 请求。第一个请求通过,我能够得到响应。第二个请求也被发送,但没有收到此请求的响应。我能够在跟踪中看到服务器上收到的两个请求。

use IO::Socket::INET;
$| = 1;

$socket = new IO::Socket::INET (
   PeerHost => '10.102.218.56',
   PeerPort => '80',
   Proto => 'tcp',);
die "cannot connect to the server $!\n" unless $socket;
print "connected to the server\n";

# data to send to a server
my $req = "GET /test/file5.html HTTP/1.1\r\nHost:10.102.218.50\r\nAccept: */*\r\n\r\n\r\n";
my $size = $socket->send($req);
print "1. sent data of length $size\n";

$socket->recv($response, 1024);
print "received response: $response\n";

my $req = "GET /test/file5.html HTTP/1.1\r\nHost:10.102.218.50\r\nAccept: */*\r\n\r\n\r\n";
my $size = $socket->send($req);
print "1. sent data of length $size\n";

$socket->recv($response, 1024);
print "received response: $response\n";
sleep 1;
$socket->close();

在 Apache access_log 上,我只看到一个接收到的 HTTP 请求实例:

10.102.218.50 - - [02/Sep/2014:23:04:50 +0530] "GET /test/file5.html HTTP/1.1" 200 6 "-" "-"

我猜我缺少一些指示服务器 HTTP 请求结束的字符。但我无法找到它们是什么。

我在这里做错了什么?

编辑:回答第一个 HTTP 请求后,Apache 服务器是否可以关闭连接。有这个设置吗?

Edit2: KeepAlive 在我的 apache 服务器上设置为 Off。将其设置为 ON 可解决此问题。

4

1 回答 1

0

发现了问题。KeepAlive 在我的 Apache 服务器上设置为关闭。将 KeepAlive 设置为 On 解决了该问题。

于 2014-09-02T12:36:26.523 回答