2014-09-02 132 views
2

我有以下perl脚本通过sinlge tcp连接发送流水线http请求。第一个请求通过,我能够得到回应。第二次请求也被发送,但没有收到此请求的回应。我能够在跟踪中看到服务器上收到的两个请求。无法通过perl套接字发送流水线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访问日志,我看到正在接收HTTP请求只有一个实例:

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

我猜测,我缺少一些字符表示服务器的HTTP请求结束。但我无法找到它们。

我在这里做错了什么?

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

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

回答

0

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