diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2016-12-16 11:06:29 -0500 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2016-12-16 16:58:04 -0500 |
commit | 4d7f5737f150c4bab8d3832bab9da62eddfea7d2 (patch) | |
tree | 3f5e56edf1e30f1a8da842e28ca283f196e8560b /tests/request.t | |
parent | f792d84cf9d16e8089aef7206b4a60d31c11ad55 (diff) | |
download | lighttpd-git-4d7f5737f150c4bab8d3832bab9da62eddfea7d2.tar.gz |
[core] support Transfer-Encoding: chunked req body (fixes #2156)
support Transfer-Encoding: chunked request body in conjunction with
server.stream-request-body = 0
dynamic handlers will still return 411 Length Required if
server.stream-request-body = 1 or 2 (!= 0)
since CGI-like env requires CONTENT_LENGTH be set
(and mod_proxy currently sends HTTP/1.0 requests to backends,
and Content-Length recommended for robust interaction with backend)
x-ref:
"request: support Chunked Transfer Coding for HTTP PUT"
https://redmine.lighttpd.net/issues/2156
Diffstat (limited to 'tests/request.t')
-rwxr-xr-x | tests/request.t | 117 |
1 files changed, 116 insertions, 1 deletions
diff --git a/tests/request.t b/tests/request.t index a1ff4db0..a073a7c1 100755 --- a/tests/request.t +++ b/tests/request.t @@ -8,7 +8,7 @@ BEGIN { use strict; use IO::Socket; -use Test::More tests => 52; +use Test::More tests => 59; use LightyTest; my $tf = LightyTest->new(); @@ -119,6 +119,121 @@ EOF $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 417 } ]; ok($tf->handle_http($t) == 0, 'Continue, Expect'); +# note Transfer-Encoding: chunked tests will fail with 411 Length Required if +# server.stream-request-body != 0 in lighttpd.conf +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +a +0123456789 +0 + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, lc hex'); + +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +A +0123456789 +0 + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, uc hex'); + +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +a +0123456789 +0 +Test-Trailer: testing + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, with trailer'); + +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +a; comment +0123456789 +0 + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked, chunked header comment'); + +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +az +0123456789 +0 + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked; bad chunked header'); + +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +a +0123456789xxxxxxxx +0 + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked; mismatch chunked header size and chunked data size'); + +$t->{REQUEST} = ( <<EOF +POST /get-post-len.pl HTTP/1.1 +Host: www.example.org +Connection: close +Content-Type: application/x-www-form-urlencoded +Transfer-Encoding: chunked + +a ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +0123456789 +0 + +EOF + ); +$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ]; +ok($tf->handle_http($t) == 0, 'POST via Transfer-Encoding: chunked; chunked header too long'); + ## ranges $t->{REQUEST} = ( <<EOF |