comparison src/http/modules/ngx_http_not_modified_filter_module.c @ 509:9b8c906f6e63 release-0.1.29

nginx-0.1.29-RELEASE import *) Feature: the ngx_http_ssi_module supports "include virtual" command. *) Feature: the ngx_http_ssi_module supports the condition command like 'if expr="$NAME"' and "else" and "endif" commands. Only one nested level is supported. *) Feature: the ngx_http_ssi_module supports the DATE_LOCAL and DATE_GMT variables and "config timefmt" command. *) Feature: the "ssi_ignore_recycled_buffers" directive. *) Bugfix: the "echo" command did not show the default value for the empty QUERY_STRING variable. *) Change: the ngx_http_proxy_module was rewritten. *) Feature: the "proxy_redirect", "proxy_pass_request_headers", "proxy_pass_request_body", and "proxy_method" directives. *) Feature: the "proxy_set_header" directive. The "proxy_x_var" was canceled and must be replaced with the proxy_set_header directive. *) Change: the "proxy_preserve_host" is canceled and must be replaced with the "proxy_set_header Host $host" and the "proxy_redirect off" directives, the "proxy_set_header Host $host:$proxy_port" directive and the appropriate proxy_redirect directives. *) Change: the "proxy_set_x_real_ip" is canceled and must be replaced with the "proxy_set_header X-Real-IP $remote_addr" directive. *) Change: the "proxy_add_x_forwarded_for" is canceled and must be replaced with the "proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for" directive. *) Change: the "proxy_set_x_url" is canceled and must be replaced with the "proxy_set_header X-URL http://$host:$server_port$request_uri" directive. *) Feature: the "fastcgi_param" directive. *) Change: the "fastcgi_root", "fastcgi_set_var" and "fastcgi_params" directive are canceled and must be replaced with the fastcgi_param directives. *) Feature: the "index" directive can use the variables. *) Feature: the "index" directive can be used at http and server levels. *) Change: the last index only in the "index" directive can be absolute. *) Feature: the "rewrite" directive can use the variables. *) Feature: the "internal" directive. *) Feature: the CONTENT_LENGTH, CONTENT_TYPE, REMOTE_PORT, SERVER_ADDR, SERVER_PORT, SERVER_PROTOCOL, DOCUMENT_ROOT, SERVER_NAME, REQUEST_METHOD, REQUEST_URI, and REMOTE_USER variables. *) Change: nginx now passes the invalid lines in a client request headers or a backend response header. *) Bugfix: if the backend did not transfer response for a long time and the "send_timeout" was less than "proxy_read_timeout", then nginx returned the 408 response. *) Bugfix: the segmentation fault was occurred if the backend sent an invalid line in response header; the bug had appeared in 0.1.26. *) Bugfix: the segmentation fault may occurred in FastCGI fault tolerance configuration. *) Bugfix: the "expires" directive did not remove the previous "Expires" and "Cache-Control" headers. *) Bugfix: nginx did not take into account trailing dot in "Host" header line. *) Bugfix: the ngx_http_auth_module did not work under Linux. *) Bugfix: the rewrite directive worked incorrectly, if the arguments were in a request. *) Bugfix: nginx could not be built on MacOS X.
author Igor Sysoev <igor@sysoev.ru>
date Thu, 12 May 2005 14:58:06 +0000
parents d4ea69372b94
children b09ee85d0ac8
comparison
equal deleted inserted replaced
508:ca1020ce99ba 509:9b8c906f6e63
12 12
13 static ngx_int_t ngx_http_not_modified_filter_init(ngx_cycle_t *cycle); 13 static ngx_int_t ngx_http_not_modified_filter_init(ngx_cycle_t *cycle);
14 14
15 15
16 static ngx_http_module_t ngx_http_not_modified_filter_module_ctx = { 16 static ngx_http_module_t ngx_http_not_modified_filter_module_ctx = {
17 NULL, /* pre conf */ 17 NULL, /* preconfiguration */
18 NULL, /* postconfiguration */
18 19
19 NULL, /* create main configuration */ 20 NULL, /* create main configuration */
20 NULL, /* init main configuration */ 21 NULL, /* init main configuration */
21 22
22 NULL, /* create server configuration */ 23 NULL, /* create server configuration */
26 NULL /* merge location configuration */ 27 NULL /* merge location configuration */
27 }; 28 };
28 29
29 30
30 ngx_module_t ngx_http_not_modified_filter_module = { 31 ngx_module_t ngx_http_not_modified_filter_module = {
31 NGX_MODULE, 32 NGX_MODULE_V1,
32 &ngx_http_not_modified_filter_module_ctx, /* module context */ 33 &ngx_http_not_modified_filter_module_ctx, /* module context */
33 NULL, /* module directives */ 34 NULL, /* module directives */
34 NGX_HTTP_MODULE, /* module type */ 35 NGX_HTTP_MODULE, /* module type */
35 ngx_http_not_modified_filter_init, /* init module */ 36 ngx_http_not_modified_filter_init, /* init module */
36 NULL /* init process */ 37 NULL /* init process */
43 static ngx_int_t ngx_http_not_modified_header_filter(ngx_http_request_t *r) 44 static ngx_int_t ngx_http_not_modified_header_filter(ngx_http_request_t *r)
44 { 45 {
45 time_t ims; 46 time_t ims;
46 47
47 if (r->headers_out.status != NGX_HTTP_OK 48 if (r->headers_out.status != NGX_HTTP_OK
49 || r->main
48 || r->headers_in.if_modified_since == NULL 50 || r->headers_in.if_modified_since == NULL
49 || r->headers_out.last_modified_time == -1) 51 || r->headers_out.last_modified_time == -1)
50 { 52 {
51 return ngx_http_next_header_filter(r); 53 return ngx_http_next_header_filter(r);
52 } 54 }
61 * I think that the equality of the dates is correcter 63 * I think that the equality of the dates is correcter
62 */ 64 */
63 65
64 if (ims != NGX_ERROR && ims == r->headers_out.last_modified_time) { 66 if (ims != NGX_ERROR && ims == r->headers_out.last_modified_time) {
65 r->headers_out.status = NGX_HTTP_NOT_MODIFIED; 67 r->headers_out.status = NGX_HTTP_NOT_MODIFIED;
66 r->headers_out.content_type->key.len = 0; 68 r->headers_out.content_type.len = 0;
67 r->headers_out.content_type = NULL;
68 r->headers_out.content_length_n = -1; 69 r->headers_out.content_length_n = -1;
69 r->headers_out.content_length = NULL; 70 r->headers_out.content_length = NULL;
70 #if 0 71 #if 0
71 r->headers_out.accept_ranges->key.len = 0; 72 r->headers_out.accept_ranges->hash = 0;
72 #endif 73 #endif
73 } 74 }
74 75
75 return ngx_http_next_header_filter(r); 76 return ngx_http_next_header_filter(r);
76 } 77 }