Req #51191 [Com]: Request body is 0-size when chunked requests are used

From: Date: Wed, 15 Sep 2021 07:11:36 +0000
Subject: Req #51191 [Com]: Request body is 0-size when chunked requests are used
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-236606@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=51191&edit=1

 ID:                 51191
 Comment by:         tim dot siebels at iserv dot eu
 Reported by:        evert at rooftopsolutions dot nl
 Summary:            Request body is 0-size when chunked requests are
                     used
 Status:             Open
 Type:               Feature/Change Request
 Package:            CGI/CLI related
 Operating System:   *
 PHP Version:        5.3.1
 Block user comment: N
 Private report:     N

 New Comment:

We are encountering this issue when disabling fastcgi_request_buffering in nginx.
Apparently, others are too [0,1]. The older bug [1] led to apache "fixing" this issue by
buffering all chunked requests.

I've opened a thread on the nginx mailinglist [2] regarding this. The assessment there is, that
fastcgi is a inherently chunked protocol and thus php should not depend on the CONTENT_LENGTH
variable, and rather read out all the fastcgi records to get the body.

How do you feel about this? Do you agree that this should be fixed in php?

[0] https://trac.cyberduck.io/wiki/help/en/howto/mount/issues/fastcgi
[1] https://bugs.php.net/bug.php?id=60826
[2] http://mailman.nginx.org/pipermail/nginx/2021-September/061029.html


Previous Comments:
------------------------------------------------------------------------
[2010-08-04 09:14:01] evert at rooftopsolutions dot nl

I can confirm this is only happening for CGI and FastCGI.

Nginx and Lighttpd don't seem to support this feature at all, and simply return 411 Length
Required, but with Apache the request goes through but PHP ends up with an empty request body.

------------------------------------------------------------------------
[2010-08-04 08:05:38] jpa at php dot mail dot kapsi dot fi

Here is a test case for the bug, using netcat to send the request:
http://koti.kapsi.fi/~jpa/stuff/other/php-chunked-test.tgz

A simple bash cgi script correctly receives the request, so the problem is with PHP's CGI and
FCGI interfaces. Instead of requiring a CONTENT_LENGTH header, PHP should simply read to EOF on
stdin when TRANSFER_ENCODING is chunked.

------------------------------------------------------------------------
[2010-03-03 05:55:23] evert at rooftopsolutions dot nl

Description:
------------
Disclaimer: I'm not 100% sure if this is a PHP-FCGI bug.

When (PUT-) HTTP requests are made and encoded as Transfer-Encoding: Chunked, PHP never receives the
request body, e.g.:

echo strlen(fopen('php://input','r')); will yield 0.

Chunked Transfer Encoding is used by the OS/X Finder WebDAV client. It works correctly when mod_php
is used, but fails with FastCGI.

Nginx and Lighttpd don't support this at all, and return 411 Length Required, which still
sucks, but is better than silently failing.


Test script:
---------------
echo strlen(fopen('php://input','r'));

Expected result:
----------------
size of the request body

Actual result:
--------------
0


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



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


Thread (8 messages)

« previous php.bugs (#236606) next »