2

単一の tcp 接続を介してパイプライン化された http 要求を送信する次の perl スクリプトがあります。最初のリクエストが通過し、応答を得ることができます。2 番目の要求も送信されますが、この要求に対する応答は受信されません。トレースで、サーバーで両方のリクエストが受信されていることを確認できます。

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 リクエストのインスタンスが 1 つだけ受信されていることがわかります。

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

サーバーの HTTP 要求の終了を示すいくつかの文字が欠落していると推測しています。しかし、私はそれらが何であるかを見つけることができません。

ここで何が間違っていますか?

編集: 最初の HTTP 要求が応答された後、Apache サーバーが接続を閉じている可能性があります。これには設定がありますか?

Edit2: Apache サーバーで KeepAlive が Off に設定されていました。オンに設定すると、問題が修正されます。

4

1 に答える 1

0

問題が見つかりました。キープアライブは、Apache サーバーでオフに設定されていました。キープアライブをオンに設定すると、問題が修正されました。

于 2014-09-02T12:36:26.523 に答える