Mercurial > hg > nginx-tests
comparison h2_headers.t @ 1522:d8684b300d22
Tests: ignore_invalid_headers, underscores_in_headers directives.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 18 Oct 2019 13:33:34 +0300 |
parents | 1220f0055135 |
children | 6c9e3e20af97 |
comparison
equal
deleted
inserted
replaced
1521:b6699ffd9ddd | 1522:d8684b300d22 |
---|---|
1 #!/usr/bin/perl | 1 #!/usr/bin/perl |
2 | 2 |
3 # (C) Sergey Kandaurov | 3 # (C) Sergey Kandaurov |
4 # (C) Nginx, Inc. | 4 # (C) Nginx, Inc. |
5 | 5 |
6 # Tests for HTTP/2 protocol with headers. | 6 # Tests for HTTP/2 headers. |
7 # various HEADERS compression/encoding, see hpack() for mode details. | |
8 | 7 |
9 ############################################################################### | 8 ############################################################################### |
10 | 9 |
11 use warnings; | 10 use warnings; |
12 use strict; | 11 use strict; |
22 ############################################################################### | 21 ############################################################################### |
23 | 22 |
24 select STDERR; $| = 1; | 23 select STDERR; $| = 1; |
25 select STDOUT; $| = 1; | 24 select STDOUT; $| = 1; |
26 | 25 |
27 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite/)->plan(93) | 26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite/)->plan(97) |
28 ->write_file_expand('nginx.conf', <<'EOF'); | 27 ->write_file_expand('nginx.conf', <<'EOF'); |
29 | 28 |
30 %%TEST_GLOBALS%% | 29 %%TEST_GLOBALS%% |
31 | 30 |
32 daemon off; | 31 daemon off; |
101 listen 127.0.0.1:8085 http2; | 100 listen 127.0.0.1:8085 http2; |
102 server_name localhost; | 101 server_name localhost; |
103 | 102 |
104 http2_max_header_size 64; | 103 http2_max_header_size 64; |
105 } | 104 } |
105 | |
106 server { | |
107 listen 127.0.0.1:8086 http2; | |
108 server_name localhost; | |
109 | |
110 underscores_in_headers on; | |
111 add_header X-Sent-Foo $http_x_foo always; | |
112 } | |
113 | |
114 server { | |
115 listen 127.0.0.1:8087 http2; | |
116 server_name localhost; | |
117 | |
118 ignore_invalid_headers off; | |
119 add_header X-Sent-Foo $http_x_foo always; | |
120 } | |
106 } | 121 } |
107 | 122 |
108 EOF | 123 EOF |
109 | 124 |
110 $t->run_daemon(\&http_daemon); | 125 $t->run_daemon(\&http_daemon); |
949 $frames = $s->read(all => [{ type => 'HEADERS' }]); | 964 $frames = $s->read(all => [{ type => 'HEADERS' }]); |
950 | 965 |
951 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 966 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
952 is($frame->{headers}->{'x-referer'}, 'see-this', 'after invalid header name'); | 967 is($frame->{headers}->{'x-referer'}, 'see-this', 'after invalid header name'); |
953 | 968 |
969 # other invalid header name characters as seen with ':' result in RST_STREAM | |
970 | |
971 $s = Test::Nginx::HTTP2->new(); | |
972 $sid = $s->new_stream({ headers => [ | |
973 { name => ':method', value => 'GET', mode => 0 }, | |
974 { name => ':scheme', value => 'http', mode => 0 }, | |
975 { name => ':path', value => '/', mode => 0 }, | |
976 { name => ':authority', value => 'localhost', mode => 1 }, | |
977 { name => 'x:foo', value => "x-bar", mode => 2 }, | |
978 { name => 'referer', value => "see-this", mode => 1 }]}); | |
979 $frames = $s->read(all => [{ type => 'RST_STREAM' }]); | |
980 | |
981 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames; | |
982 is($frame->{sid}, $sid, 'colon in header name - RST_STREAM sid'); | |
983 is($frame->{code}, 1, 'colon in header name - RST_STREAM code'); | |
984 | |
985 # header name with underscore - underscores_in_headers on | |
986 | |
987 $s = Test::Nginx::HTTP2->new(port(8086)); | |
988 $sid = $s->new_stream({ headers => [ | |
989 { name => ':method', value => 'GET', mode => 0 }, | |
990 { name => ':scheme', value => 'http', mode => 0 }, | |
991 { name => ':path', value => '/', mode => 0 }, | |
992 { name => ':authority', value => 'localhost', mode => 1 }, | |
993 { name => 'x_foo', value => "x-bar", mode => 2 }, | |
994 { name => 'referer', value => "see-this", mode => 1 }]}); | |
995 $frames = $s->read(all => [{ type => 'HEADERS' }]); | |
996 | |
997 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
998 is($frame->{headers}->{'x-sent-foo'}, 'x-bar', | |
999 'underscore in header name - underscores_in_headers'); | |
1000 | |
1001 # header name with underscore - ignore_invalid_headers off | |
1002 | |
1003 $s = Test::Nginx::HTTP2->new(port(8087)); | |
1004 $sid = $s->new_stream({ headers => [ | |
1005 { name => ':method', value => 'GET', mode => 0 }, | |
1006 { name => ':scheme', value => 'http', mode => 0 }, | |
1007 { name => ':path', value => '/', mode => 0 }, | |
1008 { name => ':authority', value => 'localhost', mode => 1 }, | |
1009 { name => 'x_foo', value => "x-bar", mode => 2 }, | |
1010 { name => 'referer', value => "see-this", mode => 1 }]}); | |
1011 $frames = $s->read(all => [{ type => 'HEADERS' }]); | |
1012 | |
1013 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
1014 is($frame->{headers}->{'x-sent-foo'}, 'x-bar', | |
1015 'underscore in header name - ignore_invalid_headers'); | |
1016 | |
954 # missing mandatory request header ':scheme' | 1017 # missing mandatory request header ':scheme' |
955 | 1018 |
956 $s = Test::Nginx::HTTP2->new(); | 1019 $s = Test::Nginx::HTTP2->new(); |
957 $sid = $s->new_stream({ headers => [ | 1020 $sid = $s->new_stream({ headers => [ |
958 { name => ':method', value => 'GET', mode => 0 }, | 1021 { name => ':method', value => 'GET', mode => 0 }, |