annotate src/http/ngx_http_header_filter_module.c @ 6965:3ef4cadfad7f

Added support for "429 Too Many Requests" response (RFC6585). This change adds reason phrase in status line and pretty response body when "429" status code is used in "return", "limit_conn_status" and/or "limit_req_status" directives. Signed-off-by: Piotr Sikora <piotrsikora@google.com>
author Piotr Sikora <piotrsikora@google.com>
date Fri, 24 Mar 2017 02:48:03 -0700
parents 25203fc377fb
children be5cfa918bfc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4337
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
6
98
c9b243802a17 nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 96
diff changeset
7
c9b243802a17 nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 96
diff changeset
8 #include <ngx_config.h>
c9b243802a17 nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 96
diff changeset
9 #include <ngx_core.h>
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
10 #include <ngx_http.h>
3
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 2
diff changeset
11 #include <nginx.h>
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 2
diff changeset
12
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
14 static ngx_int_t ngx_http_header_filter_init(ngx_conf_t *cf);
356
2e3cbc1bbe3c nginx-0.0.7-2004-06-16-19:32:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
15 static ngx_int_t ngx_http_header_filter(ngx_http_request_t *r);
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
16
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
17
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
18 static ngx_http_module_t ngx_http_header_filter_module_ctx = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
19 NULL, /* preconfiguration */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
20 ngx_http_header_filter_init, /* postconfiguration */
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
21
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
22 NULL, /* create main configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
23 NULL, /* init main configuration */
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
24
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
25 NULL, /* create server configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
26 NULL, /* merge server configuration */
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
27
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
28 NULL, /* create location configuration */
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 90
diff changeset
29 NULL, /* merge location configuration */
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
30 };
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
31
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
33 ngx_module_t ngx_http_header_filter_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
34 NGX_MODULE_V1,
90
37530da31268 nginx-0.0.1-2003-05-16-19:27:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 88
diff changeset
35 &ngx_http_header_filter_module_ctx, /* module context */
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
36 NULL, /* module directives */
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
37 NGX_HTTP_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
38 NULL, /* init master */
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
39 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
40 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
41 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
42 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
43 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
44 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
45 NGX_MODULE_V1_PADDING
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
46 };
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
47
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
48
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
49 static u_char ngx_http_server_string[] = "Server: nginx" CRLF;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
50 static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
51 static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
52
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
53
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
54 static ngx_str_t ngx_http_status_lines[] = {
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
55
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
56 ngx_string("200 OK"),
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 597
diff changeset
57 ngx_string("201 Created"),
3604
3a64bdacf1e4 202 Accepted status code
Igor Sysoev <igor@sysoev.ru>
parents: 3516
diff changeset
58 ngx_string("202 Accepted"),
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
59 ngx_null_string, /* "203 Non-Authoritative Information" */
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
60 ngx_string("204 No Content"),
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
61 ngx_null_string, /* "205 Reset Content" */
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
62 ngx_string("206 Partial Content"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
63
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
64 /* ngx_null_string, */ /* "207 Multi-Status" */
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
65
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
66 #define NGX_HTTP_LAST_2XX 207
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
67 #define NGX_HTTP_OFF_3XX (NGX_HTTP_LAST_2XX - 200)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
68
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
69 /* ngx_null_string, */ /* "300 Multiple Choices" */
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
70
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
71 ngx_string("301 Moved Permanently"),
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
72 ngx_string("302 Moved Temporarily"),
3631
eb5e237bfa58 303 See Other
Igor Sysoev <igor@sysoev.ru>
parents: 3604
diff changeset
73 ngx_string("303 See Other"),
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
74 ngx_string("304 Not Modified"),
4491
d11f86a16e3b Added support for the 307 Temporary Redirect.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
75 ngx_null_string, /* "305 Use Proxy" */
d11f86a16e3b Added support for the 307 Temporary Redirect.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
76 ngx_null_string, /* "306 unused" */
d11f86a16e3b Added support for the 307 Temporary Redirect.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
77 ngx_string("307 Temporary Redirect"),
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
78
4491
d11f86a16e3b Added support for the 307 Temporary Redirect.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
79 #define NGX_HTTP_LAST_3XX 308
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
80 #define NGX_HTTP_OFF_4XX (NGX_HTTP_LAST_3XX - 301 + NGX_HTTP_OFF_3XX)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
81
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
82 ngx_string("400 Bad Request"),
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
83 ngx_string("401 Unauthorized"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
84 ngx_string("402 Payment Required"),
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
85 ngx_string("403 Forbidden"),
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
86 ngx_string("404 Not Found"),
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
87 ngx_string("405 Not Allowed"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
88 ngx_string("406 Not Acceptable"),
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
89 ngx_null_string, /* "407 Proxy Authentication Required" */
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
90 ngx_string("408 Request Time-out"),
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
91 ngx_string("409 Conflict"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
92 ngx_string("410 Gone"),
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
93 ngx_string("411 Length Required"),
1057
bbde03037ef6 NGX_HTTP_PRECONDITION_FAILED
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
94 ngx_string("412 Precondition Failed"),
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
95 ngx_string("413 Request Entity Too Large"),
5369
907f01a2a7c0 Return reason phrase for 414.
Valentin Bartenev <vbart@nginx.com>
parents: 5364
diff changeset
96 ngx_string("414 Request-URI Too Large"),
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
97 ngx_string("415 Unsupported Media Type"),
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
98 ngx_string("416 Requested Range Not Satisfiable"),
6556
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
99 ngx_null_string, /* "417 Expectation Failed" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
100 ngx_null_string, /* "418 unused" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
101 ngx_null_string, /* "419 unused" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
102 ngx_null_string, /* "420 unused" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
103 ngx_string("421 Misdirected Request"),
6965
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
104 ngx_null_string, /* "422 Unprocessable Entity" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
105 ngx_null_string, /* "423 Locked" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
106 ngx_null_string, /* "424 Failed Dependency" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
107 ngx_null_string, /* "425 unused" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
108 ngx_null_string, /* "426 Upgrade Required" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
109 ngx_null_string, /* "427 unused" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
110 ngx_null_string, /* "428 Precondition Required" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
111 ngx_string("429 Too Many Requests"),
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
112
6965
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
113 #define NGX_HTTP_LAST_4XX 430
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
114 #define NGX_HTTP_OFF_5XX (NGX_HTTP_LAST_4XX - 400 + NGX_HTTP_OFF_4XX)
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
115
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
116 ngx_string("500 Internal Server Error"),
4920
812c4765c954 Request body: fixed "501 Not Implemented" error handling.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4698
diff changeset
117 ngx_string("501 Not Implemented"),
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
118 ngx_string("502 Bad Gateway"),
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
119 ngx_string("503 Service Temporarily Unavailable"),
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
120 ngx_string("504 Gateway Time-out"),
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
121 ngx_null_string, /* "505 HTTP Version Not Supported" */
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
122 ngx_null_string, /* "506 Variant Also Negotiates" */
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
123 ngx_string("507 Insufficient Storage"),
6556
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
124
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
125 /* ngx_null_string, */ /* "508 unused" */
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
126 /* ngx_null_string, */ /* "509 unused" */
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
127 /* ngx_null_string, */ /* "510 Not Extended" */
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
128
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
129 #define NGX_HTTP_LAST_5XX 508
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
130
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 };
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
134 ngx_http_header_out_t ngx_http_headers_out[] = {
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
135 { ngx_string("Server"), offsetof(ngx_http_headers_out_t, server) },
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
136 { ngx_string("Date"), offsetof(ngx_http_headers_out_t, date) },
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
137 { ngx_string("Content-Length"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
138 offsetof(ngx_http_headers_out_t, content_length) },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
139 { ngx_string("Content-Encoding"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
140 offsetof(ngx_http_headers_out_t, content_encoding) },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
141 { ngx_string("Location"), offsetof(ngx_http_headers_out_t, location) },
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
142 { ngx_string("Last-Modified"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
143 offsetof(ngx_http_headers_out_t, last_modified) },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
144 { ngx_string("Accept-Ranges"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
145 offsetof(ngx_http_headers_out_t, accept_ranges) },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
146 { ngx_string("Expires"), offsetof(ngx_http_headers_out_t, expires) },
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
147 { ngx_string("Cache-Control"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
148 offsetof(ngx_http_headers_out_t, cache_control) },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
149 { ngx_string("ETag"), offsetof(ngx_http_headers_out_t, etag) },
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
150
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
151 { ngx_null_string, 0 }
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
152 };
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
153
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
155 static ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
156 ngx_http_header_filter(ngx_http_request_t *r)
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 {
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
158 u_char *p;
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
159 size_t len;
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
160 ngx_str_t host, *status_line;
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
161 ngx_buf_t *b;
2529
339da812982c axe r->port
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
162 ngx_uint_t status, i, port;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
163 ngx_chain_t out;
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
164 ngx_list_part_t *part;
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
165 ngx_table_elt_t *header;
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
166 ngx_connection_t *c;
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
167 ngx_http_core_loc_conf_t *clcf;
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
168 ngx_http_core_srv_conf_t *cscf;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2197
diff changeset
169 u_char addr[NGX_SOCKADDR_STRLEN];
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
170
3662
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
171 if (r->header_sent) {
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
172 return NGX_OK;
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
173 }
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
174
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
175 r->header_sent = 1;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
176
3331
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
177 if (r != r->main) {
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
178 return NGX_OK;
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
179 }
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
180
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
181 if (r->http_version < NGX_HTTP_VERSION_10) {
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
182 return NGX_OK;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
183 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
184
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
185 if (r->method == NGX_HTTP_HEAD) {
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
186 r->header_only = 1;
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
187 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
188
432
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
189 if (r->headers_out.last_modified_time != -1) {
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
190 if (r->headers_out.status != NGX_HTTP_OK
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
191 && r->headers_out.status != NGX_HTTP_PARTIAL_CONTENT
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
192 && r->headers_out.status != NGX_HTTP_NOT_MODIFIED)
432
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
193 {
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
194 r->headers_out.last_modified_time = -1;
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
195 r->headers_out.last_modified = NULL;
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
196 }
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
197 }
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
198
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
199 len = sizeof("HTTP/1.x ") - 1 + sizeof(CRLF) - 1
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
200 /* the end of the header */
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
201 + sizeof(CRLF) - 1;
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
203 /* status line */
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
204
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
205 if (r->headers_out.status_line.len) {
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
206 len += r->headers_out.status_line.len;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
207 status_line = &r->headers_out.status_line;
57
a499e0d1f16e nginx-0.0.1-2003-01-30-10:28:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 47
diff changeset
208 #if (NGX_SUPPRESS_WARN)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
209 status = 0;
57
a499e0d1f16e nginx-0.0.1-2003-01-30-10:28:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 47
diff changeset
210 #endif
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
211
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
212 } else {
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
213
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
214 status = r->headers_out.status;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
215
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
216 if (status >= NGX_HTTP_OK
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
217 && status < NGX_HTTP_LAST_2XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
218 {
88
674d333f4296 nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 71
diff changeset
219 /* 2XX */
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
221 if (status == NGX_HTTP_NO_CONTENT) {
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
222 r->header_only = 1;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3483
diff changeset
223 ngx_str_null(&r->headers_out.content_type);
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
224 r->headers_out.last_modified_time = -1;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
225 r->headers_out.last_modified = NULL;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
226 r->headers_out.content_length = NULL;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
227 r->headers_out.content_length_n = -1;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
228 }
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
229
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
230 status -= NGX_HTTP_OK;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
231 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
232 len += ngx_http_status_lines[status].len;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
233
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
234 } else if (status >= NGX_HTTP_MOVED_PERMANENTLY
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
235 && status < NGX_HTTP_LAST_3XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
236 {
88
674d333f4296 nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 71
diff changeset
237 /* 3XX */
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
238
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
239 if (status == NGX_HTTP_NOT_MODIFIED) {
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
240 r->header_only = 1;
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
241 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
242
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
243 status = status - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_OFF_3XX;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
244 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
245 len += ngx_http_status_lines[status].len;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
246
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
247 } else if (status >= NGX_HTTP_BAD_REQUEST
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
248 && status < NGX_HTTP_LAST_4XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
249 {
88
674d333f4296 nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 71
diff changeset
250 /* 4XX */
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
251 status = status - NGX_HTTP_BAD_REQUEST
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
252 + NGX_HTTP_OFF_4XX;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
253
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
254 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
255 len += ngx_http_status_lines[status].len;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
256
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
257 } else if (status >= NGX_HTTP_INTERNAL_SERVER_ERROR
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
258 && status < NGX_HTTP_LAST_5XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
259 {
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
260 /* 5XX */
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
261 status = status - NGX_HTTP_INTERNAL_SERVER_ERROR
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
262 + NGX_HTTP_OFF_5XX;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
263
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
264 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
265 len += ngx_http_status_lines[status].len;
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
266
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
267 } else {
5382
e8d24b6d7f73 Fixed response line formatting with empty reason phrase.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5369
diff changeset
268 len += NGX_INT_T_LEN + 1 /* SP */;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
269 status_line = NULL;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
270 }
5364
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
271
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
272 if (status_line && status_line->len == 0) {
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
273 status = r->headers_out.status;
5382
e8d24b6d7f73 Fixed response line formatting with empty reason phrase.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5369
diff changeset
274 len += NGX_INT_T_LEN + 1 /* SP */;
5364
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
275 status_line = NULL;
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
276 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
277 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
278
1592
128ea9efb824 server_tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1057
diff changeset
279 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
128ea9efb824 server_tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1057
diff changeset
280
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
281 if (r->headers_out.server == NULL) {
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
282 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
283 len += sizeof(ngx_http_server_full_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
284
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
285 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
286 len += sizeof(ngx_http_server_build_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
287
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
288 } else {
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
289 len += sizeof(ngx_http_server_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
290 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
291 }
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
293 if (r->headers_out.date == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
294 len += sizeof("Date: Mon, 28 Sep 1970 06:00:00 GMT" CRLF) - 1;
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
295 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
296
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
297 if (r->headers_out.content_type.len) {
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
298 len += sizeof("Content-Type: ") - 1
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
299 + r->headers_out.content_type.len + 2;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
300
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
301 if (r->headers_out.content_type_len == r->headers_out.content_type.len
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
302 && r->headers_out.charset.len)
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
303 {
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
304 len += sizeof("; charset=") - 1 + r->headers_out.charset.len;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
305 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
306 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
307
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
308 if (r->headers_out.content_length == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
309 && r->headers_out.content_length_n >= 0)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
310 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
311 len += sizeof("Content-Length: ") - 1 + NGX_OFF_T_LEN + 2;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
312 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
313
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
314 if (r->headers_out.last_modified == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
315 && r->headers_out.last_modified_time != -1)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
316 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
317 len += sizeof("Last-Modified: Mon, 28 Sep 1970 06:00:00 GMT" CRLF) - 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
318 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
319
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
320 c = r->connection;
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
321
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
322 if (r->headers_out.location
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
323 && r->headers_out.location->value.len
6852
d15172ebb400 Core: relative redirects (closes #1000).
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
324 && r->headers_out.location->value.data[0] == '/'
d15172ebb400 Core: relative redirects (closes #1000).
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
325 && clcf->absolute_redirect)
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
326 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
327 r->headers_out.location->hash = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
328
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
329 if (clcf->server_name_in_redirect) {
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
330 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
331 host = cscf->server_name;
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
332
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
333 } else if (r->headers_in.server.len) {
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
334 host = r->headers_in.server;
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
335
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
336 } else {
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2197
diff changeset
337 host.len = NGX_SOCKADDR_STRLEN;
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
338 host.data = addr;
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
339
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
340 if (ngx_connection_local_sockaddr(c, &host, 0) != NGX_OK) {
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
341 return NGX_ERROR;
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
342 }
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
343 }
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
344
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6556
diff changeset
345 port = ngx_inet_get_port(c->local_sockaddr);
2529
339da812982c axe r->port
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
346
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
347 len += sizeof("Location: https://") - 1
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
348 + host.len
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
349 + r->headers_out.location->value.len + 2;
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
350
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
351 if (clcf->port_in_redirect) {
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
352
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
353 #if (NGX_HTTP_SSL)
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
354 if (c->ssl)
2551
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
355 port = (port == 443) ? 0 : port;
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
356 else
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
357 #endif
2551
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
358 port = (port == 80) ? 0 : port;
2768
e4a4c889694f "port_in_redirect off" did not work
Igor Sysoev <igor@sysoev.ru>
parents: 2709
diff changeset
359
e4a4c889694f "port_in_redirect off" did not work
Igor Sysoev <igor@sysoev.ru>
parents: 2709
diff changeset
360 } else {
e4a4c889694f "port_in_redirect off" did not work
Igor Sysoev <igor@sysoev.ru>
parents: 2709
diff changeset
361 port = 0;
2551
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
362 }
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
363
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
364 if (port) {
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
365 len += sizeof(":65535") - 1;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
366 }
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
367
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
368 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3483
diff changeset
369 ngx_str_null(&host);
2529
339da812982c axe r->port
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
370 port = 0;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
371 }
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 10
diff changeset
372
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
373 if (r->chunked) {
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
374 len += sizeof("Transfer-Encoding: chunked" CRLF) - 1;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
375 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
376
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
377 if (r->headers_out.status == NGX_HTTP_SWITCHING_PROTOCOLS) {
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
378 len += sizeof("Connection: upgrade" CRLF) - 1;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
379
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
380 } else if (r->keepalive) {
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
381 len += sizeof("Connection: keep-alive" CRLF) - 1;
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
382
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
383 /*
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
384 * MSIE and Opera ignore the "Keep-Alive: timeout=<N>" header.
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
385 * MSIE keeps the connection alive for about 60-65 seconds.
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
386 * Opera keeps the connection alive very long.
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
387 * Mozilla keeps the connection alive for N plus about 1-10 seconds.
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
388 * Konqueror keeps the connection alive for about N seconds.
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
389 */
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
390
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
391 if (clcf->keepalive_header) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
392 len += sizeof("Keep-Alive: timeout=") - 1 + NGX_TIME_T_LEN + 2;
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
393 }
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
394
101
2e069b6e6920 nginx-0.0.1-2003-06-04-21:28:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
395 } else {
4698
4c415af7dbc2 Fixed a harmless error in spelling of "Connection: close" when computing
Ruslan Ermilov <ru@nginx.com>
parents: 4637
diff changeset
396 len += sizeof("Connection: close" CRLF) - 1;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
397 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
398
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
399 #if (NGX_HTTP_GZIP)
3313
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
400 if (r->gzip_vary) {
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
401 if (clcf->gzip_vary) {
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
402 len += sizeof("Vary: Accept-Encoding" CRLF) - 1;
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
403
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
404 } else {
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
405 r->gzip_vary = 0;
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
406 }
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
407 }
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
408 #endif
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
409
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
410 part = &r->headers_out.headers.part;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
411 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
412
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
413 for (i = 0; /* void */; i++) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
414
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
415 if (i >= part->nelts) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
416 if (part->next == NULL) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
417 break;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
418 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
419
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
420 part = part->next;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
421 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
422 i = 0;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
423 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
424
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
425 if (header[i].hash == 0) {
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
426 continue;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
427 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
428
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
429 len += header[i].key.len + sizeof(": ") - 1 + header[i].value.len
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
430 + sizeof(CRLF) - 1;
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
431 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
432
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
433 b = ngx_create_temp_buf(r->pool, len);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
434 if (b == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
435 return NGX_ERROR;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
436 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
437
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
438 /* "HTTP/1.x " */
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
439 b->last = ngx_cpymem(b->last, "HTTP/1.1 ", sizeof("HTTP/1.x ") - 1);
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
440
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
441 /* status line */
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
442 if (status_line) {
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
443 b->last = ngx_copy(b->last, status_line->data, status_line->len);
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
444
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
445 } else {
5382
e8d24b6d7f73 Fixed response line formatting with empty reason phrase.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5369
diff changeset
446 b->last = ngx_sprintf(b->last, "%03ui ", status);
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
447 }
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
448 *b->last++ = CR; *b->last++ = LF;
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449
6449
e5076b96fd01 Reconsidered server_tokens with an empty value.
Ruslan Ermilov <ru@nginx.com>
parents: 6433
diff changeset
450 if (r->headers_out.server == NULL) {
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
451 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
452 p = ngx_http_server_full_string;
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
453 len = sizeof(ngx_http_server_full_string) - 1;
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
454
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
455 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
456 p = ngx_http_server_build_string;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
457 len = sizeof(ngx_http_server_build_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
458
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
459 } else {
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
460 p = ngx_http_server_string;
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
461 len = sizeof(ngx_http_server_string) - 1;
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
462 }
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
463
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
464 b->last = ngx_cpymem(b->last, p, len);
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
465 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
466
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
467 if (r->headers_out.date == NULL) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
468 b->last = ngx_cpymem(b->last, "Date: ", sizeof("Date: ") - 1);
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
469 b->last = ngx_cpymem(b->last, ngx_cached_http_time.data,
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
470 ngx_cached_http_time.len);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
471
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
472 *b->last++ = CR; *b->last++ = LF;
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
473 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
474
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
475 if (r->headers_out.content_type.len) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
476 b->last = ngx_cpymem(b->last, "Content-Type: ",
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
477 sizeof("Content-Type: ") - 1);
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
478 p = b->last;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
479 b->last = ngx_copy(b->last, r->headers_out.content_type.data,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
480 r->headers_out.content_type.len);
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
481
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
482 if (r->headers_out.content_type_len == r->headers_out.content_type.len
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
483 && r->headers_out.charset.len)
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
484 {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
485 b->last = ngx_cpymem(b->last, "; charset=",
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
486 sizeof("; charset=") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
487 b->last = ngx_copy(b->last, r->headers_out.charset.data,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
488 r->headers_out.charset.len);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
489
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
490 /* update r->headers_out.content_type for possible logging */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
491
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
492 r->headers_out.content_type.len = b->last - p;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
493 r->headers_out.content_type.data = p;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
494 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
495
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
496 *b->last++ = CR; *b->last++ = LF;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
497 }
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
498
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
499 if (r->headers_out.content_length == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
500 && r->headers_out.content_length_n >= 0)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
501 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
502 b->last = ngx_sprintf(b->last, "Content-Length: %O" CRLF,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
503 r->headers_out.content_length_n);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
504 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
505
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
506 if (r->headers_out.last_modified == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
507 && r->headers_out.last_modified_time != -1)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
508 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
509 b->last = ngx_cpymem(b->last, "Last-Modified: ",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
510 sizeof("Last-Modified: ") - 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
511 b->last = ngx_http_time(b->last, r->headers_out.last_modified_time);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
512
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
513 *b->last++ = CR; *b->last++ = LF;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
514 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
515
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
516 if (host.data) {
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
517
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
518 p = b->last + sizeof("Location: ") - 1;
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
519
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
520 b->last = ngx_cpymem(b->last, "Location: http",
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
521 sizeof("Location: http") - 1);
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
522
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
523 #if (NGX_HTTP_SSL)
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
524 if (c->ssl) {
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
525 *b->last++ ='s';
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
526 }
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
527 #endif
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
528
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
529 *b->last++ = ':'; *b->last++ = '/'; *b->last++ = '/';
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
530 b->last = ngx_copy(b->last, host.data, host.len);
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
531
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
532 if (port) {
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
533 b->last = ngx_sprintf(b->last, ":%ui", port);
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
534 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
535
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
536 b->last = ngx_copy(b->last, r->headers_out.location->value.data,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
537 r->headers_out.location->value.len);
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
538
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
539 /* update r->headers_out.location->value for possible logging */
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
540
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
541 r->headers_out.location->value.len = b->last - p;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
542 r->headers_out.location->value.data = p;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3483
diff changeset
543 ngx_str_set(&r->headers_out.location->key, "Location");
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 166
diff changeset
544
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
545 *b->last++ = CR; *b->last++ = LF;
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
546 }
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 10
diff changeset
547
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
548 if (r->chunked) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
549 b->last = ngx_cpymem(b->last, "Transfer-Encoding: chunked" CRLF,
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
550 sizeof("Transfer-Encoding: chunked" CRLF) - 1);
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
551 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
552
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
553 if (r->headers_out.status == NGX_HTTP_SWITCHING_PROTOCOLS) {
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
554 b->last = ngx_cpymem(b->last, "Connection: upgrade" CRLF,
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
555 sizeof("Connection: upgrade" CRLF) - 1);
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
556
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
557 } else if (r->keepalive) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
558 b->last = ngx_cpymem(b->last, "Connection: keep-alive" CRLF,
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
559 sizeof("Connection: keep-alive" CRLF) - 1);
64
34d647deb1da nginx-0.0.1-2003-03-04-09:33:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 63
diff changeset
560
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
561 if (clcf->keepalive_header) {
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
562 b->last = ngx_sprintf(b->last, "Keep-Alive: timeout=%T" CRLF,
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
563 clcf->keepalive_header);
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
564 }
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
565
64
34d647deb1da nginx-0.0.1-2003-03-04-09:33:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 63
diff changeset
566 } else {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
567 b->last = ngx_cpymem(b->last, "Connection: close" CRLF,
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
568 sizeof("Connection: close" CRLF) - 1);
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
569 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
570
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
571 #if (NGX_HTTP_GZIP)
3313
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
572 if (r->gzip_vary) {
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
573 b->last = ngx_cpymem(b->last, "Vary: Accept-Encoding" CRLF,
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
574 sizeof("Vary: Accept-Encoding" CRLF) - 1);
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
575 }
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
576 #endif
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
577
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
578 part = &r->headers_out.headers.part;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
579 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
580
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
581 for (i = 0; /* void */; i++) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
582
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
583 if (i >= part->nelts) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
584 if (part->next == NULL) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
585 break;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
586 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
587
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
588 part = part->next;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
589 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
590 i = 0;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
591 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
592
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
593 if (header[i].hash == 0) {
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
594 continue;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
595 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
596
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
597 b->last = ngx_copy(b->last, header[i].key.data, header[i].key.len);
2024
7018254cc006 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
598 *b->last++ = ':'; *b->last++ = ' ';
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
599
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
600 b->last = ngx_copy(b->last, header[i].value.data, header[i].value.len);
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
601 *b->last++ = CR; *b->last++ = LF;
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
602 }
3
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 2
diff changeset
603
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
604 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
2709
7dc6ebe26e99 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2700
diff changeset
605 "%*s", (size_t) (b->last - b->pos), b->pos);
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
606
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
607 /* the end of HTTP header */
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
608 *b->last++ = CR; *b->last++ = LF;
2
ffffe1499bce nginx-0.0.1-2002-08-16-19:27:03 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
609
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
610 r->header_size = b->last - b->pos;
210
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 208
diff changeset
611
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
612 if (r->header_only) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
613 b->last_buf = 1;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
614 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
615
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
616 out.buf = b;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
617 out.next = NULL;
2
ffffe1499bce nginx-0.0.1-2002-08-16-19:27:03 import
Igor Sysoev <igor@sysoev.ru>
parents: 1
diff changeset
618
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
619 return ngx_http_write_filter(r, &out);
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
620 }
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
621
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
622
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
623 static ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
624 ngx_http_header_filter_init(ngx_conf_t *cf)
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
625 {
71
59229033ae93 nginx-0.0.1-2003-04-08-19:40:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
626 ngx_http_top_header_filter = ngx_http_header_filter;
155
46eb23d9471d nginx-0.0.1-2003-10-22-20:38:26 import
Igor Sysoev <igor@sysoev.ru>
parents: 153
diff changeset
627
71
59229033ae93 nginx-0.0.1-2003-04-08-19:40:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
628 return NGX_OK;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
629 }