diff --git a/tests/httpserver.pl b/tests/httpserver.pl
index 0fd0bc3743657862d6af88f2fd5f6165f26c551c..86ca02fa6d4fd03039cb424767633f777c263bbb 100755
--- a/tests/httpserver.pl
+++ b/tests/httpserver.pl
@@ -18,7 +18,7 @@ listen(Server,SOMAXCONN) || die "listen: $!";
 
 logmsg "server started on port $port";
 
-open(PID, ">log/server.pid");
+open(PID, ">.server.pid");
 print PID $$;
 close(PID);
 
@@ -45,6 +45,7 @@ for ( $waitedpid = 0;
 
     # this code is forked and run
     spawn sub {
+        my ($request, $path, $ver, $left, $cl);
         while(<STDIN>) {
             if($_ =~ /(GET|POST|HEAD) (.*) HTTP\/1.(\d)/) {
                 $request=$1;
@@ -54,15 +55,19 @@ for ( $waitedpid = 0;
             elsif($_ =~ /^Content-Length: (\d*)/) {
                 $cl=$1;
             }
-            # print "RCV: $_";
 
             push @headers, $_;
 
             if($left > 0) {
                 $left -= length($_);
+                if($left == 0) {
+                    $left = -1; # just to force a loop break here
+                }
             }
+            # print STDERR "RCV ($left): $_";
 
-            if(($_ eq "\r\n") or ($_ eq "")) {
+            if(!$left &&
+               ($_ eq "\r\n") or ($_ eq "")) {
                 if($request eq "POST") {
                     $left=$cl;
                 }
@@ -80,7 +85,7 @@ for ( $waitedpid = 0;
         # test number that this server will use to know what
         # contents to pass back to the client
         #
-        if($path =~ /^\/(\d*)/) {
+        if($path =~ /.*\/(\d*)/) {
             $testnum=$1;
         }
         else {