annotate src/http/ngx_http_header_filter_module.c @ 7993:96ae8e57b3dd

Avoid sending "Connection: keep-alive" when shutting down. When a worker process is shutting down, keepalive is not used: this is checked before the ngx_http_set_keepalive() call in ngx_http_finalize_connection(). Yet the "Connection: keep-alive" header was still sent, even if we know that the worker process is shutting down, potentially resulting in additional requests being sent to the connection which is going to be closed anyway. While clients are expected to be able to handle asynchronous close events (see ticket #1022), it is certainly possible to send the "Connection: close" header instead, informing the client that the connection is going to be closed and potentially saving some unneeded work. With this change, we additionally check for worker process shutdown just before sending response headers, and disable keepalive accordingly.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 11 Jan 2022 02:23:49 +0300
parents 8801ff7d58e1
children 7c2adf237091
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"),
6977
be5cfa918bfc Added support for the "308 Permanent Redirect" (ticket #877).
Simon Leblanc <contact@leblanc-simon.eu>
parents: 6965
diff changeset
78 ngx_string("308 Permanent Redirect"),
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
79
6977
be5cfa918bfc Added support for the "308 Permanent Redirect" (ticket #877).
Simon Leblanc <contact@leblanc-simon.eu>
parents: 6965
diff changeset
80 #define NGX_HTTP_LAST_3XX 309
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
81 #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
82
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
83 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
84 ngx_string("401 Unauthorized"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
85 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
86 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
87 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
88 ngx_string("405 Not Allowed"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
89 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
90 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
91 ngx_string("408 Request Time-out"),
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
92 ngx_string("409 Conflict"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
93 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
94 ngx_string("411 Length Required"),
1057
bbde03037ef6 NGX_HTTP_PRECONDITION_FAILED
Igor Sysoev <igor@sysoev.ru>
parents: 681
diff changeset
95 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
96 ngx_string("413 Request Entity Too Large"),
5369
907f01a2a7c0 Return reason phrase for 414.
Valentin Bartenev <vbart@nginx.com>
parents: 5364
diff changeset
97 ngx_string("414 Request-URI Too Large"),
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
98 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
99 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
100 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
101 ngx_null_string, /* "418 unused" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
102 ngx_null_string, /* "419 unused" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
103 ngx_null_string, /* "420 unused" */
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6451
diff changeset
104 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
105 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
106 ngx_null_string, /* "423 Locked" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
107 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
108 ngx_null_string, /* "425 unused" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
109 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
110 ngx_null_string, /* "427 unused" */
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
111 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
112 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
113
6965
3ef4cadfad7f Added support for "429 Too Many Requests" response (RFC6585).
Piotr Sikora <piotrsikora@google.com>
parents: 6885
diff changeset
114 #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
115 #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
116
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
117 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
118 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
119 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
120 ngx_string("503 Service Temporarily Unavailable"),
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
121 ngx_string("504 Gateway Time-out"),
6993
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6977
diff changeset
122 ngx_string("505 HTTP Version Not Supported"),
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
123 ngx_null_string, /* "506 Variant Also Negotiates" */
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
124 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
125
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
126 /* ngx_null_string, */ /* "508 unused" */
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
127 /* ngx_null_string, */ /* "509 unused" */
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
128 /* ngx_null_string, */ /* "510 Not Extended" */
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
129
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
130 #define NGX_HTTP_LAST_5XX 508
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
131
1
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
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
135 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
136 { 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
137 { 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
138 { ngx_string("Content-Length"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
139 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
140 { ngx_string("Content-Encoding"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
141 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
142 { 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
143 { ngx_string("Last-Modified"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
144 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
145 { ngx_string("Accept-Ranges"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
146 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
147 { 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
148 { ngx_string("Cache-Control"),
499
64d9afb209da nginx-0.1.24-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
149 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
150 { 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
151
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
152 { 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
153 };
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
154
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
156 static ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
157 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
158 {
429
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
159 u_char *p;
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
160 size_t len;
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
161 ngx_str_t host, *status_line;
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
162 ngx_buf_t *b;
2529
339da812982c axe r->port
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
163 ngx_uint_t status, i, port;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
164 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
165 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
166 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
167 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
168 ngx_http_core_loc_conf_t *clcf;
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
169 ngx_http_core_srv_conf_t *cscf;
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2197
diff changeset
170 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
171
3662
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
172 if (r->header_sent) {
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
173 return NGX_OK;
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
174 }
a870639d2970 Fix processing
Igor Sysoev <igor@sysoev.ru>
parents: 3631
diff changeset
175
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
176 r->header_sent = 1;
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
177
3331
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
178 if (r != r->main) {
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
179 return NGX_OK;
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
180 }
e0bc43a52382 backout r3325: postpone filter is a body only filter
Igor Sysoev <igor@sysoev.ru>
parents: 3324
diff changeset
181
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
182 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
183 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
184 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
185
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
186 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
187 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
188 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
189
432
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.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
191 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
192 && r->headers_out.status != NGX_HTTP_PARTIAL_CONTENT
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
193 && 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
194 {
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_time = -1;
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
196 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
197 }
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
198 }
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 429
diff changeset
199
7993
96ae8e57b3dd Avoid sending "Connection: keep-alive" when shutting down.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6993
diff changeset
200 if (r->keepalive && (ngx_terminate || ngx_exiting)) {
96ae8e57b3dd Avoid sending "Connection: keep-alive" when shutting down.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6993
diff changeset
201 r->keepalive = 0;
96ae8e57b3dd Avoid sending "Connection: keep-alive" when shutting down.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6993
diff changeset
202 }
96ae8e57b3dd Avoid sending "Connection: keep-alive" when shutting down.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6993
diff changeset
203
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
204 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
205 /* the end of the header */
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
206 + sizeof(CRLF) - 1;
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
208 /* status line */
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
209
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
210 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
211 len += r->headers_out.status_line.len;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
212 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
213 #if (NGX_SUPPRESS_WARN)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
214 status = 0;
57
a499e0d1f16e nginx-0.0.1-2003-01-30-10:28:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 47
diff changeset
215 #endif
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
216
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
217 } else {
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
218
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
219 status = r->headers_out.status;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
220
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
221 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
222 && status < NGX_HTTP_LAST_2XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
223 {
88
674d333f4296 nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 71
diff changeset
224 /* 2XX */
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
226 if (status == NGX_HTTP_NO_CONTENT) {
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
227 r->header_only = 1;
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3483
diff changeset
228 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
229 r->headers_out.last_modified_time = -1;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
230 r->headers_out.last_modified = NULL;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
231 r->headers_out.content_length = NULL;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
232 r->headers_out.content_length_n = -1;
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
233 }
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
234
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
235 status -= NGX_HTTP_OK;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
236 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
237 len += ngx_http_status_lines[status].len;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
238
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
239 } 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
240 && status < NGX_HTTP_LAST_3XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
241 {
88
674d333f4296 nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 71
diff changeset
242 /* 3XX */
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
243
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
244 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
245 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
246 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
247
4337
68b28a88749d Renamed some constants to improve readability, no functional changes.
Ruslan Ermilov <ru@nginx.com>
parents: 3662
diff changeset
248 status = status - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_OFF_3XX;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
249 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
250 len += ngx_http_status_lines[status].len;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
251
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
252 } 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
253 && status < NGX_HTTP_LAST_4XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
254 {
88
674d333f4296 nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 71
diff changeset
255 /* 4XX */
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
256 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
257 + NGX_HTTP_OFF_4XX;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
258
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
259 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
260 len += ngx_http_status_lines[status].len;
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
261
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
262 } 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
263 && status < NGX_HTTP_LAST_5XX)
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
264 {
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
265 /* 5XX */
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
266 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
267 + NGX_HTTP_OFF_5XX;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
268
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
269 status_line = &ngx_http_status_lines[status];
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
270 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
271
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
272 } else {
5382
e8d24b6d7f73 Fixed response line formatting with empty reason phrase.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5369
diff changeset
273 len += NGX_INT_T_LEN + 1 /* SP */;
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
274 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
275 }
5364
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
276
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
277 if (status_line && status_line->len == 0) {
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
278 status = r->headers_out.status;
5382
e8d24b6d7f73 Fixed response line formatting with empty reason phrase.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5369
diff changeset
279 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
280 status_line = NULL;
941c5e3561ed Fixed incorrect response line on "return 203".
Maxim Dounin <mdounin@mdounin.ru>
parents: 5072
diff changeset
281 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
282 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
283
1592
128ea9efb824 server_tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1057
diff changeset
284 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
128ea9efb824 server_tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1057
diff changeset
285
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
286 if (r->headers_out.server == NULL) {
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
287 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
288 len += sizeof(ngx_http_server_full_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
289
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
290 } 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
291 len += sizeof(ngx_http_server_build_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
292
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
293 } else {
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
294 len += sizeof(ngx_http_server_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
295 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
296 }
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
298 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
299 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
300 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
301
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
302 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
303 len += sizeof("Content-Type: ") - 1
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
304 + 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
305
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
306 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
307 && r->headers_out.charset.len)
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
308 {
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 155
diff changeset
309 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
310 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
311 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
312
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
313 if (r->headers_out.content_length == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
314 && r->headers_out.content_length_n >= 0)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
315 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
316 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
317 }
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 if (r->headers_out.last_modified == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
320 && r->headers_out.last_modified_time != -1)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
321 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
322 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
323 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
324
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
325 c = r->connection;
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
326
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
327 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
328 && r->headers_out.location->value.len
6852
d15172ebb400 Core: relative redirects (closes #1000).
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
329 && r->headers_out.location->value.data[0] == '/'
d15172ebb400 Core: relative redirects (closes #1000).
Ruslan Ermilov <ru@nginx.com>
parents: 6593
diff changeset
330 && 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
331 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
332 r->headers_out.location->hash = 0;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
333
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
334 if (clcf->server_name_in_redirect) {
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
335 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
336 host = cscf->server_name;
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
337
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
338 } else if (r->headers_in.server.len) {
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 1811
diff changeset
339 host = r->headers_in.server;
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
340
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
341 } else {
2512
2e91aecb9e57 a prelimiary IPv6 support, HTTP listen
Igor Sysoev <igor@sysoev.ru>
parents: 2197
diff changeset
342 host.len = NGX_SOCKADDR_STRLEN;
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
343 host.data = addr;
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
344
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
345 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
346 return NGX_ERROR;
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
347 }
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
348 }
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
349
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6556
diff changeset
350 port = ngx_inet_get_port(c->local_sockaddr);
2529
339da812982c axe r->port
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
351
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
352 len += sizeof("Location: https://") - 1
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
353 + host.len
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
354 + r->headers_out.location->value.len + 2;
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
355
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
356 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
357
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
358 #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
359 if (c->ssl)
2551
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
360 port = (port == 443) ? 0 : port;
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
361 else
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
362 #endif
2551
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
363 port = (port == 80) ? 0 : port;
2768
e4a4c889694f "port_in_redirect off" did not work
Igor Sysoev <igor@sysoev.ru>
parents: 2709
diff changeset
364
e4a4c889694f "port_in_redirect off" did not work
Igor Sysoev <igor@sysoev.ru>
parents: 2709
diff changeset
365 } else {
e4a4c889694f "port_in_redirect off" did not work
Igor Sysoev <igor@sysoev.ru>
parents: 2709
diff changeset
366 port = 0;
2551
0e6f00346fa1 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 2533
diff changeset
367 }
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
368
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
369 if (port) {
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
370 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
371 }
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
372
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
373 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3483
diff changeset
374 ngx_str_null(&host);
2529
339da812982c axe r->port
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
375 port = 0;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
376 }
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 10
diff changeset
377
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
378 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
379 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
380 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
381
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
382 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
383 len += sizeof("Connection: upgrade" CRLF) - 1;
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
384
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
385 } 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
386 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
387
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
388 /*
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
389 * 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
390 * 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
391 * 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
392 * 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
393 * 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
394 */
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
395
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
396 if (clcf->keepalive_header) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
397 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
398 }
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
399
101
2e069b6e6920 nginx-0.0.1-2003-06-04-21:28:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
400 } else {
4698
4c415af7dbc2 Fixed a harmless error in spelling of "Connection: close" when computing
Ruslan Ermilov <ru@nginx.com>
parents: 4637
diff changeset
401 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
402 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
403
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
404 #if (NGX_HTTP_GZIP)
3313
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
405 if (r->gzip_vary) {
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
406 if (clcf->gzip_vary) {
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
407 len += sizeof("Vary: Accept-Encoding" CRLF) - 1;
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
408
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
409 } else {
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
410 r->gzip_vary = 0;
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
411 }
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
412 }
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
413 #endif
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
414
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
415 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
416 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
417
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
418 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
419
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
420 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
421 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
422 break;
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
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
425 part = part->next;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
426 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
427 i = 0;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
428 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
429
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
430 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
431 continue;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
432 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
433
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
434 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
435 + 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
436 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
437
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
438 b = ngx_create_temp_buf(r->pool, len);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
439 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
440 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
441 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
442
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
443 /* "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
444 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
445
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
446 /* status line */
2696
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
447 if (status_line) {
ae4744c28620 allow any status
Igor Sysoev <igor@sysoev.ru>
parents: 2551
diff changeset
448 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
449
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
450 } else {
5382
e8d24b6d7f73 Fixed response line formatting with empty reason phrase.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5369
diff changeset
451 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
452 }
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
453 *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
454
6449
e5076b96fd01 Reconsidered server_tokens with an empty value.
Ruslan Ermilov <ru@nginx.com>
parents: 6433
diff changeset
455 if (r->headers_out.server == NULL) {
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
456 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
457 p = ngx_http_server_full_string;
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
458 len = sizeof(ngx_http_server_full_string) - 1;
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
459
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
460 } 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
461 p = ngx_http_server_build_string;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
462 len = sizeof(ngx_http_server_build_string) - 1;
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
463
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
464 } else {
6885
25203fc377fb Implemented the "server_tokens build" option.
Ruslan Ermilov <ru@nginx.com>
parents: 6852
diff changeset
465 p = ngx_http_server_string;
6451
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
466 len = sizeof(ngx_http_server_string) - 1;
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
467 }
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
468
155871d773cc Backed out server_tokens changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6449
diff changeset
469 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
470 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
471
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
472 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
473 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
474 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
475 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
476
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
477 *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
478 }
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
479
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
480 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
481 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
482 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
483 p = b->last;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
484 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
485 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
486
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
487 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
488 && r->headers_out.charset.len)
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
489 {
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
490 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
491 sizeof("; charset=") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
492 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
493 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
494
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
495 /* 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
496
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
497 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
498 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
499 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
500
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
501 *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
502 }
1
d220029ac7f3 nginx-0.0.1-2002-08-15-21:20:26 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
503
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
504 if (r->headers_out.content_length == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
505 && r->headers_out.content_length_n >= 0)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
506 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
507 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
508 r->headers_out.content_length_n);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
509 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
510
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
511 if (r->headers_out.last_modified == NULL
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
512 && r->headers_out.last_modified_time != -1)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
513 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
514 b->last = ngx_cpymem(b->last, "Last-Modified: ",
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
515 sizeof("Last-Modified: ") - 1);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
516 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
517
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
518 *b->last++ = CR; *b->last++ = LF;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
519 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
520
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
521 if (host.data) {
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
522
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
523 p = b->last + sizeof("Location: ") - 1;
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
524
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
525 b->last = ngx_cpymem(b->last, "Location: http",
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
526 sizeof("Location: http") - 1);
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
527
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
528 #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
529 if (c->ssl) {
517
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
530 *b->last++ ='s';
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
531 }
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
532 #endif
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
533
dadfa78d2270 nginx-0.1.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 511
diff changeset
534 *b->last++ = ':'; *b->last++ = '/'; *b->last++ = '/';
1804
d457a1576532 several changes in server_name:
Igor Sysoev <igor@sysoev.ru>
parents: 1774
diff changeset
535 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
536
2533
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
537 if (port) {
c843171d5dc2 axe r->port_text
Igor Sysoev <igor@sysoev.ru>
parents: 2532
diff changeset
538 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
539 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
540
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
541 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
542 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
543
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
544 /* 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
545
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
546 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
547 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
548 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
549
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
550 *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
551 }
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 10
diff changeset
552
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
553 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
554 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
555 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
556 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 98
diff changeset
557
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
558 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
559 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
560 sizeof("Connection: upgrade" CRLF) - 1);
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
561
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4920
diff changeset
562 } 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
563 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
564 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
565
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
566 if (clcf->keepalive_header) {
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
567 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
568 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
569 }
694cd6cdb714 nginx-0.0.11-2004-09-17-20:07:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
570
64
34d647deb1da nginx-0.0.1-2003-03-04-09:33:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 63
diff changeset
571 } 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
572 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
573 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
574 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
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 #if (NGX_HTTP_GZIP)
3313
118169a8ec92 refactor gzip_vary handling
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
577 if (r->gzip_vary) {
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
578 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
579 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
580 }
2081
8488178092f2 nginx could not be build without gzip, introduced in r2052
Igor Sysoev <igor@sysoev.ru>
parents: 2051
diff changeset
581 #endif
2051
115e6f029fcc "gzip_vary on" always sends "Vary: Accept-Encoding" header
Igor Sysoev <igor@sysoev.ru>
parents: 2024
diff changeset
582
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
583 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
584 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
585
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
586 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
587
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
588 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
589 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
590 break;
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
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
593 part = part->next;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
594 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
595 i = 0;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
596 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
597
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
598 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
599 continue;
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
600 }
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 19
diff changeset
601
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
602 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
603 *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
604
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
605 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
606 *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
607 }
3
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 2
diff changeset
608
2857
507fc5ac9839 use ngx_connection_local_sockaddr() instead of ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 2768
diff changeset
609 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
2709
7dc6ebe26e99 fix debug logging
Igor Sysoev <igor@sysoev.ru>
parents: 2700
diff changeset
610 "%*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
611
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 91
diff changeset
612 /* the end of HTTP header */
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
613 *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
614
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
615 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
616
41
59e7c7f30d49 nginx-0.0.1-2002-12-26-19:26:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 26
diff changeset
617 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
618 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
619 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
620
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
621 out.buf = b;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
622 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
623
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
624 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
625 }
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
626
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
627
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
628 static ngx_int_t
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
629 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
630 {
71
59229033ae93 nginx-0.0.1-2003-04-08-19:40:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
631 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
632
71
59229033ae93 nginx-0.0.1-2003-04-08-19:40:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
633 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
634 }