annotate src/http/ngx_http_headers.c @ 315:39b6f2df45c0

nginx-0.0.3-2004-04-14-21:44:28 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 14 Apr 2004 17:44:28 +0000
parents 98f1a8028067
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 #include <ngx_config.h>
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 #include <ngx_core.h>
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 #include <ngx_http.h>
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 ngx_http_header_t ngx_http_headers_in[] = {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 { ngx_string("Host"), offsetof(ngx_http_headers_in_t, host) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 { ngx_string("Connection"), offsetof(ngx_http_headers_in_t, connection) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 { ngx_string("If-Modified-Since"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 offsetof(ngx_http_headers_in_t, if_modified_since) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 { ngx_string("User-Agent"), offsetof(ngx_http_headers_in_t, user_agent) },
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
13 { ngx_string("Referer"), offsetof(ngx_http_headers_in_t, referer) },
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 { ngx_string("Content-Length"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 offsetof(ngx_http_headers_in_t, content_length) },
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
16
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 { ngx_string("Range"), offsetof(ngx_http_headers_in_t, range) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #if 0
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 { ngx_string("If-Range"), offsetof(ngx_http_headers_in_t, if_range) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 #endif
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21
286
fc8dc489247e nginx-0.0.2-2004-03-12-00:34:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
22 #if (NGX_HTTP_GZIP)
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
23 { ngx_string("Accept-Encoding"),
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
24 offsetof(ngx_http_headers_in_t, accept_encoding) },
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
25 { ngx_string("Via"), offsetof(ngx_http_headers_in_t, via) },
286
fc8dc489247e nginx-0.0.2-2004-03-12-00:34:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
26 #endif
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
27
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
28 { ngx_string("Authorization"),
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
29 offsetof(ngx_http_headers_in_t, authorization) },
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 169
diff changeset
30
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 { ngx_string("Keep-Alive"), offsetof(ngx_http_headers_in_t, keep_alive) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 286
diff changeset
33 #if (NGX_HTTP_PROXY)
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 286
diff changeset
34 { ngx_string("X-Forwarded-For"),
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 286
diff changeset
35 offsetof(ngx_http_headers_in_t, x_forwarded_for) },
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 286
diff changeset
36 #endif
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 286
diff changeset
37
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 { ngx_null_string, 0 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 };
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 ngx_http_header_t ngx_http_headers_out[] = {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 { ngx_string("Server"), offsetof(ngx_http_headers_out_t, server) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 { ngx_string("Date"), offsetof(ngx_http_headers_out_t, date) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 { ngx_string("Content-Type"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 offsetof(ngx_http_headers_out_t, content_type) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 { ngx_string("Content-Length"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 offsetof(ngx_http_headers_out_t, content_length) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 { ngx_string("Content-Encoding"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 offsetof(ngx_http_headers_out_t, content_encoding) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 { ngx_string("Location"), offsetof(ngx_http_headers_out_t, location) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 { ngx_string("Last-Modified"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 offsetof(ngx_http_headers_out_t, last_modified) },
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 { ngx_string("Accept-Ranges"),
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 offsetof(ngx_http_headers_out_t, accept_ranges) },
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
56 { ngx_string("Expires"), offsetof(ngx_http_headers_out_t, expires) },
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
57 { ngx_string("Cache-Control"),
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
58 offsetof(ngx_http_headers_out_t, cache_control) },
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
59 { ngx_string("ETag"), offsetof(ngx_http_headers_out_t, etag) },
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 { ngx_null_string, 0 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 };
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 ngx_table_elt_t *ngx_http_add_header(void *header,
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 ngx_http_header_t *http_headers)
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 {
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
68 void *prev;
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
69 ngx_uint_t i, j;
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 ngx_table_t *headers;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 ngx_table_elt_t *h, *new;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
73 headers = header;
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 prev = headers->elts;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 if (!(new = ngx_push_table(headers))) {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78 return NULL;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 if (prev == headers->elts) {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 return new;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 /*
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 * When table is relocated we need to update pointers in r->headers_in,
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 * r->headers_out, etc. However this relocation should be very rare
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 * because we preallocate enough space for the number of the real world
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 * HTTP headers.
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 */
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 ngx_log_error(NGX_LOG_ALERT, headers->pool->log, 0,
169
edf29bb717da nginx-0.0.1-2003-10-31-19:05:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 165
diff changeset
93 "header table is small, %d elements", headers->nelts - 1);
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 h = headers->elts;
169
edf29bb717da nginx-0.0.1-2003-10-31-19:05:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 165
diff changeset
96 for (i = 0; i < headers->nelts - 1; i++) {
165
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 if (h[i].key.len == 0) {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 continue;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 for (j = 0; http_headers[j].name.len != 0; j++) {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 if (http_headers[j].name.len != h[i].key.len) {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 continue;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 if (ngx_strcasecmp(http_headers[j].name.data, h[i].key.data) == 0) {
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 *((ngx_table_elt_t **)
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 ((char *) header + http_headers[j].offset)) = &h[i];
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 break;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 return new;
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 }
894a01c6aea3 nginx-0.0.1-2003-10-29-20:39:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116