11065Szelenkov@nginx.comimport unittest 21019Szelenkov@nginx.comfrom unit.applications.lang.python import TestApplicationPython 3578Szelenkov@nginx.com 41017Szelenkov@nginx.com 51019Szelenkov@nginx.comclass TestHTTPHeader(TestApplicationPython): 6*1467Szelenkov@nginx.com prerequisites = {'modules': {'python': 'any'}} 7578Szelenkov@nginx.com 8578Szelenkov@nginx.com def test_http_header_value_leading_sp(self): 9578Szelenkov@nginx.com self.load('custom_header') 10578Szelenkov@nginx.com 111017Szelenkov@nginx.com resp = self.get( 121017Szelenkov@nginx.com headers={ 131017Szelenkov@nginx.com 'Host': 'localhost', 141017Szelenkov@nginx.com 'Custom-Header': ' ,', 151017Szelenkov@nginx.com 'Connection': 'close', 161017Szelenkov@nginx.com } 171017Szelenkov@nginx.com ) 18578Szelenkov@nginx.com 19578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value leading sp status') 201017Szelenkov@nginx.com self.assertEqual( 211017Szelenkov@nginx.com resp['headers']['Custom-Header'], 221017Szelenkov@nginx.com ',', 231017Szelenkov@nginx.com 'value leading sp custom header', 241017Szelenkov@nginx.com ) 25578Szelenkov@nginx.com 26578Szelenkov@nginx.com def test_http_header_value_leading_htab(self): 27578Szelenkov@nginx.com self.load('custom_header') 28578Szelenkov@nginx.com 291017Szelenkov@nginx.com resp = self.get( 301017Szelenkov@nginx.com headers={ 311017Szelenkov@nginx.com 'Host': 'localhost', 321017Szelenkov@nginx.com 'Custom-Header': '\t,', 331017Szelenkov@nginx.com 'Connection': 'close', 341017Szelenkov@nginx.com } 351017Szelenkov@nginx.com ) 36578Szelenkov@nginx.com 37578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value leading htab status') 381017Szelenkov@nginx.com self.assertEqual( 391017Szelenkov@nginx.com resp['headers']['Custom-Header'], 401017Szelenkov@nginx.com ',', 411017Szelenkov@nginx.com 'value leading htab custom header', 421017Szelenkov@nginx.com ) 43578Szelenkov@nginx.com 44578Szelenkov@nginx.com def test_http_header_value_trailing_sp(self): 45578Szelenkov@nginx.com self.load('custom_header') 46578Szelenkov@nginx.com 471017Szelenkov@nginx.com resp = self.get( 481017Szelenkov@nginx.com headers={ 491017Szelenkov@nginx.com 'Host': 'localhost', 501017Szelenkov@nginx.com 'Custom-Header': ', ', 511017Szelenkov@nginx.com 'Connection': 'close', 521017Szelenkov@nginx.com } 531017Szelenkov@nginx.com ) 54578Szelenkov@nginx.com 55578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value trailing sp status') 561017Szelenkov@nginx.com self.assertEqual( 571017Szelenkov@nginx.com resp['headers']['Custom-Header'], 581017Szelenkov@nginx.com ',', 591017Szelenkov@nginx.com 'value trailing sp custom header', 601017Szelenkov@nginx.com ) 61578Szelenkov@nginx.com 62578Szelenkov@nginx.com def test_http_header_value_trailing_htab(self): 63578Szelenkov@nginx.com self.load('custom_header') 64578Szelenkov@nginx.com 651017Szelenkov@nginx.com resp = self.get( 661017Szelenkov@nginx.com headers={ 671017Szelenkov@nginx.com 'Host': 'localhost', 681017Szelenkov@nginx.com 'Custom-Header': ',\t', 691017Szelenkov@nginx.com 'Connection': 'close', 701017Szelenkov@nginx.com } 711017Szelenkov@nginx.com ) 72578Szelenkov@nginx.com 73578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value trailing htab status') 741017Szelenkov@nginx.com self.assertEqual( 751017Szelenkov@nginx.com resp['headers']['Custom-Header'], 761017Szelenkov@nginx.com ',', 771017Szelenkov@nginx.com 'value trailing htab custom header', 781017Szelenkov@nginx.com ) 79578Szelenkov@nginx.com 80578Szelenkov@nginx.com def test_http_header_value_both_sp(self): 81578Szelenkov@nginx.com self.load('custom_header') 82578Szelenkov@nginx.com 831017Szelenkov@nginx.com resp = self.get( 841017Szelenkov@nginx.com headers={ 851017Szelenkov@nginx.com 'Host': 'localhost', 861017Szelenkov@nginx.com 'Custom-Header': ' , ', 871017Szelenkov@nginx.com 'Connection': 'close', 881017Szelenkov@nginx.com } 891017Szelenkov@nginx.com ) 90578Szelenkov@nginx.com 91578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value both sp status') 921017Szelenkov@nginx.com self.assertEqual( 931017Szelenkov@nginx.com resp['headers']['Custom-Header'], 941017Szelenkov@nginx.com ',', 951017Szelenkov@nginx.com 'value both sp custom header', 961017Szelenkov@nginx.com ) 97578Szelenkov@nginx.com 98578Szelenkov@nginx.com def test_http_header_value_both_htab(self): 99578Szelenkov@nginx.com self.load('custom_header') 100578Szelenkov@nginx.com 1011017Szelenkov@nginx.com resp = self.get( 1021017Szelenkov@nginx.com headers={ 1031017Szelenkov@nginx.com 'Host': 'localhost', 1041017Szelenkov@nginx.com 'Custom-Header': '\t,\t', 1051017Szelenkov@nginx.com 'Connection': 'close', 1061017Szelenkov@nginx.com } 1071017Szelenkov@nginx.com ) 108578Szelenkov@nginx.com 109578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value both htab status') 1101017Szelenkov@nginx.com self.assertEqual( 1111017Szelenkov@nginx.com resp['headers']['Custom-Header'], 1121017Szelenkov@nginx.com ',', 1131017Szelenkov@nginx.com 'value both htab custom header', 1141017Szelenkov@nginx.com ) 115578Szelenkov@nginx.com 116578Szelenkov@nginx.com def test_http_header_value_chars(self): 117578Szelenkov@nginx.com self.load('custom_header') 118578Szelenkov@nginx.com 1191017Szelenkov@nginx.com resp = self.get( 1201017Szelenkov@nginx.com headers={ 1211017Szelenkov@nginx.com 'Host': 'localhost', 1221017Szelenkov@nginx.com 'Custom-Header': '(),/:;<=>?@[\]{}\t !#$%&\'*+-.^_`|~', 1231017Szelenkov@nginx.com 'Connection': 'close', 1241017Szelenkov@nginx.com } 1251017Szelenkov@nginx.com ) 126578Szelenkov@nginx.com 127578Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value chars status') 1281017Szelenkov@nginx.com self.assertEqual( 1291017Szelenkov@nginx.com resp['headers']['Custom-Header'], 1301017Szelenkov@nginx.com '(),/:;<=>?@[\]{}\t !#$%&\'*+-.^_`|~', 1311017Szelenkov@nginx.com 'value chars custom header', 1321017Szelenkov@nginx.com ) 133578Szelenkov@nginx.com 134720Szelenkov@nginx.com def test_http_header_value_chars_edge(self): 135720Szelenkov@nginx.com self.load('custom_header') 136720Szelenkov@nginx.com 1371017Szelenkov@nginx.com resp = self.http( 1381017Szelenkov@nginx.com b"""GET / HTTP/1.1 139738Szelenkov@nginx.comHost: localhost 140738Szelenkov@nginx.comCustom-Header: \x20\xFF 141738Szelenkov@nginx.comConnection: close 142738Szelenkov@nginx.com 1431017Szelenkov@nginx.com""", 1441017Szelenkov@nginx.com raw=True, 1451017Szelenkov@nginx.com encoding='latin1', 1461017Szelenkov@nginx.com ) 147720Szelenkov@nginx.com 148720Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'value chars edge status') 1491017Szelenkov@nginx.com self.assertEqual( 1501017Szelenkov@nginx.com resp['headers']['Custom-Header'], '\xFF', 'value chars edge' 1511017Szelenkov@nginx.com ) 152720Szelenkov@nginx.com 153720Szelenkov@nginx.com def test_http_header_value_chars_below(self): 154720Szelenkov@nginx.com self.load('custom_header') 155720Szelenkov@nginx.com 1561017Szelenkov@nginx.com resp = self.http( 1571017Szelenkov@nginx.com b"""GET / HTTP/1.1 158738Szelenkov@nginx.comHost: localhost 159738Szelenkov@nginx.comCustom-Header: \x1F 160738Szelenkov@nginx.comConnection: close 161738Szelenkov@nginx.com 1621017Szelenkov@nginx.com""", 1631017Szelenkov@nginx.com raw=True, 1641017Szelenkov@nginx.com ) 165720Szelenkov@nginx.com 166720Szelenkov@nginx.com self.assertEqual(resp['status'], 400, 'value chars below') 167720Szelenkov@nginx.com 168578Szelenkov@nginx.com def test_http_header_field_leading_sp(self): 169578Szelenkov@nginx.com self.load('empty') 170578Szelenkov@nginx.com 1711017Szelenkov@nginx.com resp = self.get( 1721017Szelenkov@nginx.com headers={ 1731017Szelenkov@nginx.com 'Host': 'localhost', 1741017Szelenkov@nginx.com ' Custom-Header': 'blah', 1751017Szelenkov@nginx.com 'Connection': 'close', 1761017Szelenkov@nginx.com } 1771017Szelenkov@nginx.com ) 178578Szelenkov@nginx.com 179578Szelenkov@nginx.com self.assertEqual(resp['status'], 400, 'field leading sp') 180578Szelenkov@nginx.com 181578Szelenkov@nginx.com def test_http_header_field_leading_htab(self): 182578Szelenkov@nginx.com self.load('empty') 183578Szelenkov@nginx.com 1841017Szelenkov@nginx.com resp = self.get( 1851017Szelenkov@nginx.com headers={ 1861017Szelenkov@nginx.com 'Host': 'localhost', 1871017Szelenkov@nginx.com '\tCustom-Header': 'blah', 1881017Szelenkov@nginx.com 'Connection': 'close', 1891017Szelenkov@nginx.com } 1901017Szelenkov@nginx.com ) 191578Szelenkov@nginx.com 192578Szelenkov@nginx.com self.assertEqual(resp['status'], 400, 'field leading htab') 193578Szelenkov@nginx.com 194578Szelenkov@nginx.com def test_http_header_field_trailing_sp(self): 195578Szelenkov@nginx.com self.load('empty') 196578Szelenkov@nginx.com 1971017Szelenkov@nginx.com resp = self.get( 1981017Szelenkov@nginx.com headers={ 1991017Szelenkov@nginx.com 'Host': 'localhost', 2001017Szelenkov@nginx.com 'Custom-Header ': 'blah', 2011017Szelenkov@nginx.com 'Connection': 'close', 2021017Szelenkov@nginx.com } 2031017Szelenkov@nginx.com ) 204578Szelenkov@nginx.com 205578Szelenkov@nginx.com self.assertEqual(resp['status'], 400, 'field trailing sp') 206578Szelenkov@nginx.com 207578Szelenkov@nginx.com def test_http_header_field_trailing_htab(self): 208578Szelenkov@nginx.com self.load('empty') 209578Szelenkov@nginx.com 2101017Szelenkov@nginx.com resp = self.get( 2111017Szelenkov@nginx.com headers={ 2121017Szelenkov@nginx.com 'Host': 'localhost', 2131017Szelenkov@nginx.com 'Custom-Header\t': 'blah', 2141017Szelenkov@nginx.com 'Connection': 'close', 2151017Szelenkov@nginx.com } 2161017Szelenkov@nginx.com ) 217578Szelenkov@nginx.com 218578Szelenkov@nginx.com self.assertEqual(resp['status'], 400, 'field trailing htab') 219578Szelenkov@nginx.com 220936Szelenkov@nginx.com def test_http_header_content_length_big(self): 221936Szelenkov@nginx.com self.load('empty') 222936Szelenkov@nginx.com 2231017Szelenkov@nginx.com self.assertEqual( 2241017Szelenkov@nginx.com self.post( 2251017Szelenkov@nginx.com headers={ 2261017Szelenkov@nginx.com 'Host': 'localhost', 2271017Szelenkov@nginx.com 'Content-Length': str(2 ** 64), 2281017Szelenkov@nginx.com 'Connection': 'close', 2291017Szelenkov@nginx.com }, 2301017Szelenkov@nginx.com body='X' * 1000, 2311017Szelenkov@nginx.com )['status'], 2321017Szelenkov@nginx.com 400, 2331017Szelenkov@nginx.com 'Content-Length big', 2341017Szelenkov@nginx.com ) 235936Szelenkov@nginx.com 236936Szelenkov@nginx.com def test_http_header_content_length_negative(self): 237936Szelenkov@nginx.com self.load('empty') 238936Szelenkov@nginx.com 2391017Szelenkov@nginx.com self.assertEqual( 2401017Szelenkov@nginx.com self.post( 2411017Szelenkov@nginx.com headers={ 2421017Szelenkov@nginx.com 'Host': 'localhost', 2431017Szelenkov@nginx.com 'Content-Length': '-100', 2441017Szelenkov@nginx.com 'Connection': 'close', 2451017Szelenkov@nginx.com }, 2461017Szelenkov@nginx.com body='X' * 1000, 2471017Szelenkov@nginx.com )['status'], 2481017Szelenkov@nginx.com 400, 2491017Szelenkov@nginx.com 'Content-Length negative', 2501017Szelenkov@nginx.com ) 251936Szelenkov@nginx.com 252936Szelenkov@nginx.com def test_http_header_content_length_text(self): 253936Szelenkov@nginx.com self.load('empty') 254936Szelenkov@nginx.com 2551017Szelenkov@nginx.com self.assertEqual( 2561017Szelenkov@nginx.com self.post( 2571017Szelenkov@nginx.com headers={ 2581017Szelenkov@nginx.com 'Host': 'localhost', 2591017Szelenkov@nginx.com 'Content-Length': 'blah', 2601017Szelenkov@nginx.com 'Connection': 'close', 2611017Szelenkov@nginx.com }, 2621017Szelenkov@nginx.com body='X' * 1000, 2631017Szelenkov@nginx.com )['status'], 2641017Szelenkov@nginx.com 400, 2651017Szelenkov@nginx.com 'Content-Length text', 2661017Szelenkov@nginx.com ) 267936Szelenkov@nginx.com 268936Szelenkov@nginx.com def test_http_header_content_length_multiple_values(self): 269936Szelenkov@nginx.com self.load('empty') 270936Szelenkov@nginx.com 2711017Szelenkov@nginx.com self.assertEqual( 2721017Szelenkov@nginx.com self.post( 2731017Szelenkov@nginx.com headers={ 2741017Szelenkov@nginx.com 'Host': 'localhost', 2751017Szelenkov@nginx.com 'Content-Length': '41, 42', 2761017Szelenkov@nginx.com 'Connection': 'close', 2771017Szelenkov@nginx.com }, 2781017Szelenkov@nginx.com body='X' * 1000, 2791017Szelenkov@nginx.com )['status'], 2801017Szelenkov@nginx.com 400, 2811017Szelenkov@nginx.com 'Content-Length multiple value', 2821017Szelenkov@nginx.com ) 283936Szelenkov@nginx.com 284936Szelenkov@nginx.com def test_http_header_content_length_multiple_fields(self): 285936Szelenkov@nginx.com self.load('empty') 286936Szelenkov@nginx.com 2871017Szelenkov@nginx.com self.assertEqual( 2881017Szelenkov@nginx.com self.post( 2891017Szelenkov@nginx.com headers={ 2901017Szelenkov@nginx.com 'Host': 'localhost', 2911017Szelenkov@nginx.com 'Content-Length': ['41', '42'], 2921017Szelenkov@nginx.com 'Connection': 'close', 2931017Szelenkov@nginx.com }, 2941017Szelenkov@nginx.com body='X' * 1000, 2951017Szelenkov@nginx.com )['status'], 2961017Szelenkov@nginx.com 400, 2971017Szelenkov@nginx.com 'Content-Length multiple fields', 2981017Szelenkov@nginx.com ) 299936Szelenkov@nginx.com 3001065Szelenkov@nginx.com @unittest.skip('not yet') 301973Szelenkov@nginx.com def test_http_header_host_absent(self): 302973Szelenkov@nginx.com self.load('host') 303973Szelenkov@nginx.com 304973Szelenkov@nginx.com resp = self.get(headers={'Connection': 'close'}) 305973Szelenkov@nginx.com 3061065Szelenkov@nginx.com self.assertEqual(resp['status'], 400, 'Host absent status') 307973Szelenkov@nginx.com 308973Szelenkov@nginx.com def test_http_header_host_empty(self): 309973Szelenkov@nginx.com self.load('host') 310973Szelenkov@nginx.com 3111017Szelenkov@nginx.com resp = self.get(headers={'Host': '', 'Connection': 'close'}) 312973Szelenkov@nginx.com 313973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host empty status') 3141017Szelenkov@nginx.com self.assertNotEqual( 3151017Szelenkov@nginx.com resp['headers']['X-Server-Name'], '', 'Host empty SERVER_NAME' 3161017Szelenkov@nginx.com ) 317973Szelenkov@nginx.com 318973Szelenkov@nginx.com def test_http_header_host_big(self): 319973Szelenkov@nginx.com self.load('empty') 320973Szelenkov@nginx.com 3211017Szelenkov@nginx.com self.assertEqual( 3221017Szelenkov@nginx.com self.get(headers={'Host': 'X' * 10000, 'Connection': 'close'})[ 3231017Szelenkov@nginx.com 'status' 3241017Szelenkov@nginx.com ], 3251017Szelenkov@nginx.com 431, 3261017Szelenkov@nginx.com 'Host big', 3271017Szelenkov@nginx.com ) 328973Szelenkov@nginx.com 329973Szelenkov@nginx.com def test_http_header_host_port(self): 330973Szelenkov@nginx.com self.load('host') 331973Szelenkov@nginx.com 3321017Szelenkov@nginx.com resp = self.get( 3331017Szelenkov@nginx.com headers={'Host': 'exmaple.com:7080', 'Connection': 'close'} 3341017Szelenkov@nginx.com ) 335973Szelenkov@nginx.com 336973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host port status') 3371017Szelenkov@nginx.com self.assertEqual( 3381017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 3391017Szelenkov@nginx.com 'exmaple.com', 3401017Szelenkov@nginx.com 'Host port SERVER_NAME', 3411017Szelenkov@nginx.com ) 3421017Szelenkov@nginx.com self.assertEqual( 3431017Szelenkov@nginx.com resp['headers']['X-Http-Host'], 3441017Szelenkov@nginx.com 'exmaple.com:7080', 3451017Szelenkov@nginx.com 'Host port HTTP_HOST', 3461017Szelenkov@nginx.com ) 347973Szelenkov@nginx.com 348973Szelenkov@nginx.com def test_http_header_host_port_empty(self): 349973Szelenkov@nginx.com self.load('host') 350973Szelenkov@nginx.com 3511017Szelenkov@nginx.com resp = self.get( 3521017Szelenkov@nginx.com headers={'Host': 'exmaple.com:', 'Connection': 'close'} 3531017Szelenkov@nginx.com ) 354973Szelenkov@nginx.com 355973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host port empty status') 3561017Szelenkov@nginx.com self.assertEqual( 3571017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 3581017Szelenkov@nginx.com 'exmaple.com', 3591017Szelenkov@nginx.com 'Host port empty SERVER_NAME', 3601017Szelenkov@nginx.com ) 3611017Szelenkov@nginx.com self.assertEqual( 3621017Szelenkov@nginx.com resp['headers']['X-Http-Host'], 3631017Szelenkov@nginx.com 'exmaple.com:', 3641017Szelenkov@nginx.com 'Host port empty HTTP_HOST', 3651017Szelenkov@nginx.com ) 366973Szelenkov@nginx.com 367973Szelenkov@nginx.com def test_http_header_host_literal(self): 368973Szelenkov@nginx.com self.load('host') 369973Szelenkov@nginx.com 3701017Szelenkov@nginx.com resp = self.get(headers={'Host': '127.0.0.1', 'Connection': 'close'}) 371973Szelenkov@nginx.com 372973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host literal status') 3731017Szelenkov@nginx.com self.assertEqual( 3741017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 3751017Szelenkov@nginx.com '127.0.0.1', 3761017Szelenkov@nginx.com 'Host literal SERVER_NAME', 3771017Szelenkov@nginx.com ) 378973Szelenkov@nginx.com 379973Szelenkov@nginx.com def test_http_header_host_literal_ipv6(self): 380973Szelenkov@nginx.com self.load('host') 381973Szelenkov@nginx.com 3821017Szelenkov@nginx.com resp = self.get(headers={'Host': '[::1]:7080', 'Connection': 'close'}) 383973Szelenkov@nginx.com 384973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host literal ipv6 status') 3851017Szelenkov@nginx.com self.assertEqual( 3861017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 3871017Szelenkov@nginx.com '[::1]', 3881017Szelenkov@nginx.com 'Host literal ipv6 SERVER_NAME', 3891017Szelenkov@nginx.com ) 3901017Szelenkov@nginx.com self.assertEqual( 3911017Szelenkov@nginx.com resp['headers']['X-Http-Host'], 3921017Szelenkov@nginx.com '[::1]:7080', 3931017Szelenkov@nginx.com 'Host literal ipv6 HTTP_HOST', 3941017Szelenkov@nginx.com ) 395973Szelenkov@nginx.com 396973Szelenkov@nginx.com def test_http_header_host_trailing_period(self): 397973Szelenkov@nginx.com self.load('host') 398973Szelenkov@nginx.com 3991017Szelenkov@nginx.com resp = self.get(headers={'Host': '127.0.0.1.', 'Connection': 'close'}) 400973Szelenkov@nginx.com 401973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host trailing period status') 4021017Szelenkov@nginx.com self.assertEqual( 4031017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 4041017Szelenkov@nginx.com '127.0.0.1', 4051017Szelenkov@nginx.com 'Host trailing period SERVER_NAME', 4061017Szelenkov@nginx.com ) 4071017Szelenkov@nginx.com self.assertEqual( 4081017Szelenkov@nginx.com resp['headers']['X-Http-Host'], 4091017Szelenkov@nginx.com '127.0.0.1.', 4101017Szelenkov@nginx.com 'Host trailing period HTTP_HOST', 4111017Szelenkov@nginx.com ) 412973Szelenkov@nginx.com 413973Szelenkov@nginx.com def test_http_header_host_trailing_period_2(self): 414973Szelenkov@nginx.com self.load('host') 415973Szelenkov@nginx.com 4161017Szelenkov@nginx.com resp = self.get( 4171017Szelenkov@nginx.com headers={'Host': 'EXAMPLE.COM.', 'Connection': 'close'} 4181017Szelenkov@nginx.com ) 419973Szelenkov@nginx.com 420973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host trailing period 2 status') 4211017Szelenkov@nginx.com self.assertEqual( 4221017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 4231017Szelenkov@nginx.com 'example.com', 4241017Szelenkov@nginx.com 'Host trailing period 2 SERVER_NAME', 4251017Szelenkov@nginx.com ) 4261017Szelenkov@nginx.com self.assertEqual( 4271017Szelenkov@nginx.com resp['headers']['X-Http-Host'], 4281017Szelenkov@nginx.com 'EXAMPLE.COM.', 4291017Szelenkov@nginx.com 'Host trailing period 2 HTTP_HOST', 4301017Szelenkov@nginx.com ) 431973Szelenkov@nginx.com 432973Szelenkov@nginx.com def test_http_header_host_case_insensitive(self): 433973Szelenkov@nginx.com self.load('host') 434973Szelenkov@nginx.com 4351017Szelenkov@nginx.com resp = self.get(headers={'Host': 'EXAMPLE.COM', 'Connection': 'close'}) 436973Szelenkov@nginx.com 437973Szelenkov@nginx.com self.assertEqual(resp['status'], 200, 'Host case insensitive') 4381017Szelenkov@nginx.com self.assertEqual( 4391017Szelenkov@nginx.com resp['headers']['X-Server-Name'], 4401017Szelenkov@nginx.com 'example.com', 4411017Szelenkov@nginx.com 'Host case insensitive SERVER_NAME', 4421017Szelenkov@nginx.com ) 443973Szelenkov@nginx.com 444973Szelenkov@nginx.com def test_http_header_host_double_dot(self): 445973Szelenkov@nginx.com self.load('empty') 446973Szelenkov@nginx.com 4471017Szelenkov@nginx.com self.assertEqual( 4481017Szelenkov@nginx.com self.get(headers={'Host': '127.0.0..1', 'Connection': 'close'})[ 4491017Szelenkov@nginx.com 'status' 4501017Szelenkov@nginx.com ], 4511017Szelenkov@nginx.com 400, 4521017Szelenkov@nginx.com 'Host double dot', 4531017Szelenkov@nginx.com ) 454973Szelenkov@nginx.com 455973Szelenkov@nginx.com def test_http_header_host_slash(self): 456973Szelenkov@nginx.com self.load('empty') 457973Szelenkov@nginx.com 4581017Szelenkov@nginx.com self.assertEqual( 4591017Szelenkov@nginx.com self.get(headers={'Host': '/localhost', 'Connection': 'close'})[ 4601017Szelenkov@nginx.com 'status' 4611017Szelenkov@nginx.com ], 4621017Szelenkov@nginx.com 400, 4631017Szelenkov@nginx.com 'Host slash', 4641017Szelenkov@nginx.com ) 465973Szelenkov@nginx.com 466973Szelenkov@nginx.com def test_http_header_host_multiple_fields(self): 467973Szelenkov@nginx.com self.load('empty') 468973Szelenkov@nginx.com 4691017Szelenkov@nginx.com self.assertEqual( 4701017Szelenkov@nginx.com self.get( 4711017Szelenkov@nginx.com headers={ 4721017Szelenkov@nginx.com 'Host': ['localhost', 'example.com'], 4731017Szelenkov@nginx.com 'Connection': 'close', 4741017Szelenkov@nginx.com } 4751017Szelenkov@nginx.com )['status'], 4761017Szelenkov@nginx.com 400, 4771017Szelenkov@nginx.com 'Host multiple fields', 4781017Szelenkov@nginx.com ) 4791017Szelenkov@nginx.com 480973Szelenkov@nginx.com 481578Szelenkov@nginx.comif __name__ == '__main__': 4821019Szelenkov@nginx.com TestHTTPHeader.main() 483