Bug #60826 [Com]: raw POST data missing with chunked encoding, FastCGI

From: Date: Fri, 09 Mar 2012 09:33:06 +0000
Subject: Bug #60826 [Com]: raw POST data missing with chunked encoding, FastCGI
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-168298@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=60826&edit=1

 ID:                 60826
 Comment by:         florian dot fernandez at navaho dot fr
 Reported by:        clarkwise at gmail dot com
 Summary:            raw POST data missing with chunked encoding, FastCGI
 Status:             Assigned
 Type:               Bug
 Package:            CGI/CLI related
 Operating System:   Windows XP
 PHP Version:        5.3.9
 Assigned To:        ab
 Block user comment: N
 Private report:     N

 New Comment:

The problem seems to have been resolved with php 5.4.0 and apache 2.4.1. I can't reproduce it
with this configuration and chunked http requests are now coming through to php now.

I am going to try with php 5.3.10 and apache 2.4.1 and give feedback on where it goes.


Previous Comments:
------------------------------------------------------------------------
[2012-03-05 11:46:27] florian dot fernandez at navaho dot fr

I forgot to mention that this is on a Linux system

------------------------------------------------------------------------
[2012-03-05 10:08:17] florian dot fernandez at navaho dot fr

Same problem here. Apache 2.2.15 and PHP 5.3.10 running as FastCGI.

POST datas sent with "Transfer-encoding: chunked" are not received as they should be. The
raw request looks like this :

POST receiveChunk.php HTTP/1.1
User-Agent: PECL::HTTP/1.7.2 (PHP/5.3.8)
Host: www.test.fr
Accept: */*
Pragma: no-cache
Connection: keep-alive
Cache-Control: no-cache
Content-Length: 682668
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

3ff4
(here, the datas)
0

and the request as the receiving script sees it :

User-Agent: PECL::HTTP/1.7.2 (PHP/5.3.8)
Host: www.test.fr
Accept: */*
Pragma: no-cache
Connection: close
Cache-Control: no-cache


As you can see, the request body is empty.

However, this problem does not occur when PHP runs as mod_php under Apache. Problem confirmed under
PHP 5.3.8 and 5.3.9.

I don't know if that is a PHP bug and maybe the developers could confirm or not that the
request body are wrong before it reaches PHP. I think that it appears to be a mod_fcgid bug and
should be reported as one to Apache bug list.


Here are the scripts to reproduce the bug :

sendChunk.php :
<?php
$fileContentToUp = 'ICAgICAgICAgIgICAgIA==';

$header_array = array(
	'Pragma' => 'no-cache',
	'Connection' => 'keep-alive',
	'Cache-Control' => 'no-cache',
	'Content-Length' => strlen($fileContentToUp) ,
	'Transfer-Encoding' => 'chunked'
	);

$options = array(headers => $header_array);

$r = new HttpRequest('receiveChunk.php', HTTP_METH_POST, $options);
$r->setContentType('text/html; charset=UTF-8');
$r->setBody($fileContentToUp);
$result = $r->send();

echo '$r->getRawRequestMessage() => ';
print_r($r->getRawRequestMessage());
echo "\n\n";
echo '$r->send()->getBody() => ';
print_r($r->send()->getBody());
echo "\n\n";
?>

receiveChunk.php :
<?php
$HttpResponse = new HttpResponse();
echo 'http_get_request_header => '."\n";
print_r($HttpResponse->getRequestHeaders());
echo "\n\n";
echo 'http_get_request_body => '."\n";
print_r($HttpResponse->getRequestBody());
echo "\n\n";
?>

Hope that helps.

------------------------------------------------------------------------
[2012-03-01 20:24:53] clarkwise at gmail dot com

Since I am using Windows XP, I'm stuck using IIS 5.1. When I have the opportunity 
to try nginx w/ chunkin or IIS 7.5, I'll update with further details. Thanks.

------------------------------------------------------------------------
[2012-03-01 08:31:15] ab@php.net

@clarkwise at gmail dot com

So could you confirm it works with nginx+chunkin?

As well, it's was not hanging with IIS (v7.5) for me. Which IIS version do you 
have?

------------------------------------------------------------------------
[2012-02-09 19:17:27] ab@php.net

I've additionally tested the two files on nginx with PHP as FCGI. The request simply
doesn't go throught to PHP and nginx gives 401 back. I've attached gdb to the PHP and set
a break in the accept loop - there was no reaction when using the two test files, but requests
without data got down to PHP. So my conclusion were - apache simply ignores the request body where
nginx gives a correct http status. Anyways, this has nothing to do with PHP. IIS, Apache and Nginx
seem to have no implementation for chunked incoming body stuff, but they do handle that a different
way.

Btw. Nginx has the "chunkin" module for such actions.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=60826


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=60826&edit=1


Thread (30 messages)

« previous php.bugs (#168298) next »