Mercurial > hg > nginx-ranges
annotate src/http/ngx_http_request.h @ 635:e67b227c8dbb default tip
Merge with current.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 25 Apr 2011 04:07:55 +0400 |
parents | f3a9e57d2e17 ce857f6b74a7 |
children |
rev | line source |
---|---|
0 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 */ | |
5 | |
6 | |
7 #ifndef _NGX_HTTP_REQUEST_H_INCLUDED_ | |
8 #define _NGX_HTTP_REQUEST_H_INCLUDED_ | |
9 | |
10 | |
200 | 11 #define NGX_HTTP_MAX_URI_CHANGES 10 |
206 | 12 #define NGX_HTTP_MAX_SUBREQUESTS 50 |
58 | 13 |
198 | 14 /* must be 2^n */ |
15 #define NGX_HTTP_LC_HEADER_LEN 32 | |
16 | |
58 | 17 |
0 | 18 #define NGX_HTTP_DISCARD_BUFFER_SIZE 4096 |
19 #define NGX_HTTP_LINGERING_BUFFER_SIZE 4096 | |
20 | |
21 | |
22 #define NGX_HTTP_VERSION_9 9 | |
23 #define NGX_HTTP_VERSION_10 1000 | |
24 #define NGX_HTTP_VERSION_11 1001 | |
25 | |
182 | 26 #define NGX_HTTP_UNKNOWN 0x0001 |
27 #define NGX_HTTP_GET 0x0002 | |
28 #define NGX_HTTP_HEAD 0x0004 | |
29 #define NGX_HTTP_POST 0x0008 | |
30 #define NGX_HTTP_PUT 0x0010 | |
31 #define NGX_HTTP_DELETE 0x0020 | |
186 | 32 #define NGX_HTTP_MKCOL 0x0040 |
256 | 33 #define NGX_HTTP_COPY 0x0080 |
34 #define NGX_HTTP_MOVE 0x0100 | |
35 #define NGX_HTTP_OPTIONS 0x0200 | |
36 #define NGX_HTTP_PROPFIND 0x0400 | |
37 #define NGX_HTTP_PROPPATCH 0x0800 | |
38 #define NGX_HTTP_LOCK 0x1000 | |
39 #define NGX_HTTP_UNLOCK 0x2000 | |
591 | 40 #define NGX_HTTP_PATCH 0x4000 |
41 #define NGX_HTTP_TRACE 0x8000 | |
0 | 42 |
43 #define NGX_HTTP_CONNECTION_CLOSE 1 | |
44 #define NGX_HTTP_CONNECTION_KEEP_ALIVE 2 | |
45 | |
46 | |
47 #define NGX_NONE 1 | |
48 | |
49 | |
50 #define NGX_HTTP_PARSE_HEADER_DONE 1 | |
51 | |
52 #define NGX_HTTP_CLIENT_ERROR 10 | |
53 #define NGX_HTTP_PARSE_INVALID_METHOD 10 | |
54 #define NGX_HTTP_PARSE_INVALID_REQUEST 11 | |
54 | 55 #define NGX_HTTP_PARSE_INVALID_09_METHOD 12 |
0 | 56 |
54 | 57 #define NGX_HTTP_PARSE_INVALID_HEADER 13 |
0 | 58 |
248 | 59 |
585 | 60 /* unused 1 */ |
248 | 61 #define NGX_HTTP_SUBREQUEST_IN_MEMORY 2 |
435 | 62 #define NGX_HTTP_SUBREQUEST_WAITED 4 |
542 | 63 #define NGX_HTTP_LOG_UNSAFE 8 |
122 | 64 |
0 | 65 |
66 #define NGX_HTTP_OK 200 | |
182 | 67 #define NGX_HTTP_CREATED 201 |
591 | 68 #define NGX_HTTP_ACCEPTED 202 |
60 | 69 #define NGX_HTTP_NO_CONTENT 204 |
0 | 70 #define NGX_HTTP_PARTIAL_CONTENT 206 |
71 | |
72 #define NGX_HTTP_SPECIAL_RESPONSE 300 | |
73 #define NGX_HTTP_MOVED_PERMANENTLY 301 | |
74 #define NGX_HTTP_MOVED_TEMPORARILY 302 | |
593 | 75 #define NGX_HTTP_SEE_OTHER 303 |
0 | 76 #define NGX_HTTP_NOT_MODIFIED 304 |
77 | |
78 #define NGX_HTTP_BAD_REQUEST 400 | |
52 | 79 #define NGX_HTTP_UNAUTHORIZED 401 |
0 | 80 #define NGX_HTTP_FORBIDDEN 403 |
81 #define NGX_HTTP_NOT_FOUND 404 | |
82 #define NGX_HTTP_NOT_ALLOWED 405 | |
83 #define NGX_HTTP_REQUEST_TIME_OUT 408 | |
186 | 84 #define NGX_HTTP_CONFLICT 409 |
130 | 85 #define NGX_HTTP_LENGTH_REQUIRED 411 |
276 | 86 #define NGX_HTTP_PRECONDITION_FAILED 412 |
0 | 87 #define NGX_HTTP_REQUEST_ENTITY_TOO_LARGE 413 |
88 #define NGX_HTTP_REQUEST_URI_TOO_LARGE 414 | |
186 | 89 #define NGX_HTTP_UNSUPPORTED_MEDIA_TYPE 415 |
0 | 90 #define NGX_HTTP_RANGE_NOT_SATISFIABLE 416 |
91 | |
92 | |
93 /* Our own HTTP codes */ | |
94 | |
136 | 95 /* The special code to close connection without any response */ |
96 #define NGX_HTTP_CLOSE 444 | |
97 | |
625 | 98 #define NGX_HTTP_NGINX_CODES 494 |
99 | |
100 #define NGX_HTTP_REQUEST_HEADER_TOO_LARGE 494 | |
196 | 101 |
102 #define NGX_HTTPS_CERT_ERROR 495 | |
103 #define NGX_HTTPS_NO_CERT 496 | |
0 | 104 |
105 /* | |
106 * We use the special code for the plain HTTP requests that are sent to | |
126 | 107 * HTTPS port to distinguish it from 4XX in an error page redirection |
0 | 108 */ |
109 #define NGX_HTTP_TO_HTTPS 497 | |
110 | |
162 | 111 /* 498 is the canceled code for the requests with invalid host name */ |
0 | 112 |
113 /* | |
114 * HTTP does not define the code for the case when a client closed | |
115 * the connection while we are processing its request so we introduce | |
116 * own code to log such situation when a client has closed the connection | |
117 * before we even try to send the HTTP header to it | |
118 */ | |
119 #define NGX_HTTP_CLIENT_CLOSED_REQUEST 499 | |
120 | |
121 | |
122 #define NGX_HTTP_INTERNAL_SERVER_ERROR 500 | |
123 #define NGX_HTTP_NOT_IMPLEMENTED 501 | |
124 #define NGX_HTTP_BAD_GATEWAY 502 | |
125 #define NGX_HTTP_SERVICE_UNAVAILABLE 503 | |
126 #define NGX_HTTP_GATEWAY_TIME_OUT 504 | |
186 | 127 #define NGX_HTTP_INSUFFICIENT_STORAGE 507 |
0 | 128 |
129 | |
254 | 130 #define NGX_HTTP_LOWLEVEL_BUFFERED 0xf0 |
131 #define NGX_HTTP_WRITE_BUFFERED 0x10 | |
132 #define NGX_HTTP_GZIP_BUFFERED 0x20 | |
133 #define NGX_HTTP_SSI_BUFFERED 0x01 | |
296 | 134 #define NGX_HTTP_SUB_BUFFERED 0x02 |
135 #define NGX_HTTP_COPY_BUFFERED 0x04 | |
146 | 136 |
137 | |
0 | 138 typedef enum { |
139 NGX_HTTP_INITING_REQUEST_STATE = 0, | |
140 NGX_HTTP_READING_REQUEST_STATE, | |
141 NGX_HTTP_PROCESS_REQUEST_STATE, | |
142 | |
143 NGX_HTTP_CONNECT_UPSTREAM_STATE, | |
144 NGX_HTTP_WRITING_UPSTREAM_STATE, | |
145 NGX_HTTP_READING_UPSTREAM_STATE, | |
146 | |
147 NGX_HTTP_WRITING_REQUEST_STATE, | |
148 NGX_HTTP_LINGERING_CLOSE_STATE, | |
149 NGX_HTTP_KEEPALIVE_STATE | |
150 } ngx_http_state_e; | |
151 | |
152 | |
153 typedef struct { | |
50 | 154 ngx_str_t name; |
155 ngx_uint_t offset; | |
58 | 156 ngx_http_header_handler_pt handler; |
0 | 157 } ngx_http_header_t; |
158 | |
159 | |
160 typedef struct { | |
58 | 161 ngx_str_t name; |
162 ngx_uint_t offset; | |
118 | 163 } ngx_http_header_out_t; |
58 | 164 |
165 | |
166 typedef struct { | |
50 | 167 ngx_list_t headers; |
0 | 168 |
50 | 169 ngx_table_elt_t *host; |
170 ngx_table_elt_t *connection; | |
171 ngx_table_elt_t *if_modified_since; | |
621 | 172 ngx_table_elt_t *if_unmodified_since; |
50 | 173 ngx_table_elt_t *user_agent; |
174 ngx_table_elt_t *referer; | |
175 ngx_table_elt_t *content_length; | |
176 ngx_table_elt_t *content_type; | |
0 | 177 |
50 | 178 ngx_table_elt_t *range; |
346 | 179 ngx_table_elt_t *if_range; |
0 | 180 |
130 | 181 ngx_table_elt_t *transfer_encoding; |
384 | 182 ngx_table_elt_t *expect; |
130 | 183 |
0 | 184 #if (NGX_HTTP_GZIP) |
50 | 185 ngx_table_elt_t *accept_encoding; |
186 ngx_table_elt_t *via; | |
0 | 187 #endif |
188 | |
50 | 189 ngx_table_elt_t *authorization; |
0 | 190 |
50 | 191 ngx_table_elt_t *keep_alive; |
0 | 192 |
520 | 193 #if (NGX_HTTP_PROXY || NGX_HTTP_REALIP || NGX_HTTP_GEO) |
50 | 194 ngx_table_elt_t *x_forwarded_for; |
0 | 195 #endif |
196 | |
122 | 197 #if (NGX_HTTP_REALIP) |
198 ngx_table_elt_t *x_real_ip; | |
199 #endif | |
200 | |
38 | 201 #if (NGX_HTTP_HEADERS) |
50 | 202 ngx_table_elt_t *accept; |
203 ngx_table_elt_t *accept_language; | |
38 | 204 #endif |
205 | |
186 | 206 #if (NGX_HTTP_DAV) |
207 ngx_table_elt_t *depth; | |
208 ngx_table_elt_t *destination; | |
276 | 209 ngx_table_elt_t *overwrite; |
230 | 210 ngx_table_elt_t *date; |
186 | 211 #endif |
212 | |
52 | 213 ngx_str_t user; |
214 ngx_str_t passwd; | |
215 | |
50 | 216 ngx_array_t cookies; |
217 | |
376 | 218 ngx_str_t server; |
212 | 219 off_t content_length_n; |
50 | 220 time_t keep_alive_n; |
0 | 221 |
50 | 222 unsigned connection_type:2; |
223 unsigned msie:1; | |
224 unsigned msie4:1; | |
406 | 225 unsigned msie6:1; |
50 | 226 unsigned opera:1; |
227 unsigned gecko:1; | |
558 | 228 unsigned chrome:1; |
574 | 229 unsigned safari:1; |
50 | 230 unsigned konqueror:1; |
0 | 231 } ngx_http_headers_in_t; |
232 | |
233 | |
234 typedef struct { | |
50 | 235 ngx_list_t headers; |
0 | 236 |
50 | 237 ngx_uint_t status; |
238 ngx_str_t status_line; | |
0 | 239 |
50 | 240 ngx_table_elt_t *server; |
241 ngx_table_elt_t *date; | |
242 ngx_table_elt_t *content_length; | |
243 ngx_table_elt_t *content_encoding; | |
244 ngx_table_elt_t *location; | |
348 | 245 ngx_table_elt_t *refresh; |
50 | 246 ngx_table_elt_t *last_modified; |
247 ngx_table_elt_t *content_range; | |
248 ngx_table_elt_t *accept_ranges; | |
52 | 249 ngx_table_elt_t *www_authenticate; |
50 | 250 ngx_table_elt_t *expires; |
251 ngx_table_elt_t *etag; | |
0 | 252 |
206 | 253 ngx_str_t *override_charset; |
254 | |
255 size_t content_type_len; | |
58 | 256 ngx_str_t content_type; |
50 | 257 ngx_str_t charset; |
394 | 258 u_char *content_type_lowcase; |
259 ngx_uint_t content_type_hash; | |
206 | 260 |
58 | 261 ngx_array_t cache_control; |
262 | |
50 | 263 off_t content_length_n; |
264 time_t date_time; | |
265 time_t last_modified_time; | |
0 | 266 } ngx_http_headers_out_t; |
267 | |
268 | |
28 | 269 typedef void (*ngx_http_client_body_handler_pt)(ngx_http_request_t *r); |
270 | |
0 | 271 typedef struct { |
28 | 272 ngx_temp_file_t *temp_file; |
273 ngx_chain_t *bufs; | |
274 ngx_buf_t *buf; | |
212 | 275 off_t rest; |
182 | 276 ngx_chain_t *to_write; |
28 | 277 ngx_http_client_body_handler_pt post_handler; |
0 | 278 } ngx_http_request_body_t; |
279 | |
280 | |
281 typedef struct { | |
50 | 282 ngx_http_request_t *request; |
0 | 283 |
50 | 284 ngx_buf_t **busy; |
285 ngx_int_t nbusy; | |
0 | 286 |
50 | 287 ngx_buf_t **free; |
288 ngx_int_t nfree; | |
0 | 289 |
50 | 290 ngx_uint_t pipeline; /* unsigned pipeline:1; */ |
0 | 291 } ngx_http_connection_t; |
292 | |
293 | |
326 | 294 typedef struct ngx_http_server_name_s ngx_http_server_name_t; |
295 | |
296 | |
297 typedef struct { | |
298 ngx_hash_combined_t names; | |
299 | |
300 ngx_uint_t nregex; | |
301 ngx_http_server_name_t *regex; | |
302 } ngx_http_virtual_names_t; | |
142 | 303 |
304 | |
118 | 305 typedef void (*ngx_http_cleanup_pt)(void *data); |
306 | |
307 typedef struct ngx_http_cleanup_s ngx_http_cleanup_t; | |
308 | |
309 struct ngx_http_cleanup_s { | |
142 | 310 ngx_http_cleanup_pt handler; |
311 void *data; | |
312 ngx_http_cleanup_t *next; | |
118 | 313 }; |
314 | |
315 | |
248 | 316 typedef ngx_int_t (*ngx_http_post_subrequest_pt)(ngx_http_request_t *r, |
317 void *data, ngx_int_t rc); | |
318 | |
319 typedef struct { | |
320 ngx_http_post_subrequest_pt handler; | |
321 void *data; | |
322 } ngx_http_post_subrequest_t; | |
323 | |
324 | |
58 | 325 typedef struct ngx_http_postponed_request_s ngx_http_postponed_request_t; |
326 | |
327 struct ngx_http_postponed_request_s { | |
84 | 328 ngx_http_request_t *request; |
329 ngx_chain_t *out; | |
330 ngx_http_postponed_request_t *next; | |
58 | 331 }; |
332 | |
333 | |
435 | 334 typedef struct ngx_http_posted_request_s ngx_http_posted_request_t; |
335 | |
336 struct ngx_http_posted_request_s { | |
337 ngx_http_request_t *request; | |
338 ngx_http_posted_request_t *next; | |
339 }; | |
340 | |
341 | |
0 | 342 typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r); |
58 | 343 typedef void (*ngx_http_event_handler_pt)(ngx_http_request_t *r); |
344 | |
0 | 345 |
346 struct ngx_http_request_s { | |
50 | 347 uint32_t signature; /* "HTTP" */ |
0 | 348 |
50 | 349 ngx_connection_t *connection; |
0 | 350 |
50 | 351 void **ctx; |
352 void **main_conf; | |
353 void **srv_conf; | |
354 void **loc_conf; | |
0 | 355 |
58 | 356 ngx_http_event_handler_pt read_event_handler; |
357 ngx_http_event_handler_pt write_event_handler; | |
358 | |
473 | 359 #if (NGX_HTTP_CACHE) |
50 | 360 ngx_http_cache_t *cache; |
473 | 361 #endif |
0 | 362 |
50 | 363 ngx_http_upstream_t *upstream; |
296 | 364 ngx_array_t *upstream_states; |
365 /* of ngx_http_upstream_state_t */ | |
28 | 366 |
50 | 367 ngx_pool_t *pool; |
368 ngx_buf_t *header_in; | |
0 | 369 |
50 | 370 ngx_http_headers_in_t headers_in; |
371 ngx_http_headers_out_t headers_out; | |
0 | 372 |
50 | 373 ngx_http_request_body_t *request_body; |
0 | 374 |
50 | 375 time_t lingering_time; |
298 | 376 time_t start_sec; |
377 ngx_msec_t start_msec; | |
0 | 378 |
50 | 379 ngx_uint_t method; |
380 ngx_uint_t http_version; | |
126 | 381 |
50 | 382 ngx_str_t request_line; |
383 ngx_str_t uri; | |
384 ngx_str_t args; | |
385 ngx_str_t exten; | |
386 ngx_str_t unparsed_uri; | |
0 | 387 |
50 | 388 ngx_str_t method_name; |
389 ngx_str_t http_protocol; | |
126 | 390 |
58 | 391 ngx_chain_t *out; |
50 | 392 ngx_http_request_t *main; |
58 | 393 ngx_http_request_t *parent; |
394 ngx_http_postponed_request_t *postponed; | |
248 | 395 ngx_http_post_subrequest_t *post_subrequest; |
435 | 396 ngx_http_posted_request_t *posted_requests; |
0 | 397 |
487 | 398 ngx_http_virtual_names_t *virtual_names; |
399 | |
50 | 400 ngx_int_t phase_handler; |
401 ngx_http_handler_pt content_handler; | |
92 | 402 ngx_uint_t access_code; |
34 | 403 |
122 | 404 ngx_http_variable_value_t *variables; |
50 | 405 |
465 | 406 #if (NGX_PCRE) |
407 ngx_uint_t ncaptures; | |
408 int *captures; | |
409 u_char *captures_data; | |
410 #endif | |
411 | |
76 | 412 size_t limit_rate; |
413 | |
0 | 414 /* used to learn the Apache compatible response length without a header */ |
50 | 415 size_t header_size; |
0 | 416 |
212 | 417 off_t request_length; |
24 | 418 |
50 | 419 ngx_uint_t err_status; |
0 | 420 |
50 | 421 ngx_http_connection_t *http_connection; |
0 | 422 |
58 | 423 ngx_http_log_handler_pt log_handler; |
424 | |
118 | 425 ngx_http_cleanup_t *cleanup; |
426 | |
529 | 427 unsigned subrequests:8; |
428 unsigned count:8; | |
429 unsigned blocked:8; | |
430 | |
431 unsigned aio:1; | |
432 | |
50 | 433 unsigned http_state:4; |
0 | 434 |
2 | 435 /* URI with "/." and on Win32 with "//" */ |
50 | 436 unsigned complex_uri:1; |
34 | 437 |
2 | 438 /* URI with "%" */ |
50 | 439 unsigned quoted_uri:1; |
34 | 440 |
441 /* URI with "+" */ | |
50 | 442 unsigned plus_in_uri:1; |
34 | 443 |
591 | 444 /* URI with " " */ |
445 unsigned space_in_uri:1; | |
446 | |
60 | 447 unsigned invalid_header:1; |
448 | |
587 | 449 unsigned add_uri_to_alias:1; |
58 | 450 unsigned valid_location:1; |
54 | 451 unsigned valid_unparsed_uri:1; |
50 | 452 unsigned uri_changed:1; |
453 unsigned uri_changes:4; | |
34 | 454 |
182 | 455 unsigned request_body_in_single_buf:1; |
456 unsigned request_body_in_file_only:1; | |
457 unsigned request_body_in_persistent_file:1; | |
278 | 458 unsigned request_body_in_clean_file:1; |
182 | 459 unsigned request_body_file_group_access:1; |
186 | 460 unsigned request_body_file_log_level:3; |
182 | 461 |
248 | 462 unsigned subrequest_in_memory:1; |
435 | 463 unsigned waited:1; |
146 | 464 |
473 | 465 #if (NGX_HTTP_CACHE) |
466 unsigned cached:1; | |
467 #endif | |
558 | 468 |
469 #if (NGX_HTTP_GZIP) | |
470 unsigned gzip_tested:1; | |
471 unsigned gzip_ok:1; | |
472 unsigned gzip_vary:1; | |
473 #endif | |
358 | 474 |
50 | 475 unsigned proxy:1; |
476 unsigned bypass_cache:1; | |
477 unsigned no_cache:1; | |
0 | 478 |
272 | 479 /* |
425 | 480 * instead of using the request context data in |
427 | 481 * ngx_http_limit_zone_module and ngx_http_limit_req_module |
425 | 482 * we use the single bits in the request structure |
272 | 483 */ |
484 unsigned limit_zone_set:1; | |
425 | 485 unsigned limit_req_set:1; |
272 | 486 |
0 | 487 #if 0 |
340 | 488 unsigned cacheable:1; |
0 | 489 #endif |
58 | 490 |
50 | 491 unsigned pipeline:1; |
492 unsigned plain_http:1; | |
493 unsigned chunked:1; | |
494 unsigned header_only:1; | |
495 unsigned keepalive:1; | |
496 unsigned lingering_close:1; | |
86 | 497 unsigned discard_body:1; |
58 | 498 unsigned internal:1; |
228 | 499 unsigned error_page:1; |
503 | 500 unsigned ignore_content_encoding:1; |
497 | 501 unsigned filter_finalize:1; |
178 | 502 unsigned post_action:1; |
503 unsigned request_complete:1; | |
216 | 504 unsigned request_output:1; |
505 unsigned header_sent:1; | |
384 | 506 unsigned expect_tested:1; |
388 | 507 unsigned root_tested:1; |
58 | 508 unsigned done:1; |
420 | 509 unsigned logged:1; |
0 | 510 |
254 | 511 unsigned buffered:4; |
512 | |
62 | 513 unsigned main_filter_need_in_memory:1; |
50 | 514 unsigned filter_need_in_memory:1; |
515 unsigned filter_need_temporary:1; | |
130 | 516 unsigned allow_ranges:1; |
391
1d9bef53cd8e
Range filter: late_ranges functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
388
diff
changeset
|
517 unsigned late_ranges:1; |
0 | 518 |
519 #if (NGX_STAT_STUB) | |
50 | 520 unsigned stat_reading:1; |
521 unsigned stat_writing:1; | |
0 | 522 #endif |
523 | |
524 /* used to parse HTTP headers */ | |
248 | 525 |
50 | 526 ngx_uint_t state; |
531 | 527 |
528 ngx_uint_t header_hash; | |
529 ngx_uint_t lowcase_index; | |
530 u_char lowcase_header[NGX_HTTP_LC_HEADER_LEN]; | |
531 | |
532 u_char *header_name_start; | |
533 u_char *header_name_end; | |
534 u_char *header_start; | |
535 u_char *header_end; | |
536 | |
537 /* | |
538 * a memory that can be reused after parsing a request line | |
539 * via ngx_http_ephemeral_t | |
540 */ | |
541 | |
50 | 542 u_char *uri_start; |
543 u_char *uri_end; | |
544 u_char *uri_ext; | |
545 u_char *args_start; | |
546 u_char *request_start; | |
547 u_char *request_end; | |
548 u_char *method_end; | |
549 u_char *schema_start; | |
550 u_char *schema_end; | |
551 u_char *host_start; | |
552 u_char *host_end; | |
553 u_char *port_start; | |
554 u_char *port_end; | |
198 | 555 |
248 | 556 unsigned http_minor:16; |
557 unsigned http_major:16; | |
531 | 558 }; |
248 | 559 |
531 | 560 |
561 typedef struct { | |
562 ngx_http_posted_request_t terminal_posted_request; | |
563 #if (NGX_HAVE_AIO_SENDFILE) | |
535 | 564 u_char aio_preload; |
531 | 565 #endif |
566 } ngx_http_ephemeral_t; | |
0 | 567 |
568 | |
118 | 569 extern ngx_http_header_t ngx_http_headers_in[]; |
570 extern ngx_http_header_out_t ngx_http_headers_out[]; | |
0 | 571 |
572 | |
573 #endif /* _NGX_HTTP_REQUEST_H_INCLUDED_ */ |