Mercurial > hg > nginx
comparison src/http/modules/ngx_http_fastcgi_module.c @ 3563:90d7227d47bf
do not pass if-... headers for cacheable fastcgi responses
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 04 Jun 2010 09:17:09 +0000 |
parents | e2d54eb7472e |
children | edcc271f7c4c |
comparison
equal
deleted
inserted
replaced
3562:e2d54eb7472e | 3563:90d7227d47bf |
---|---|
532 ngx_string("X-Accel-Buffering"), | 532 ngx_string("X-Accel-Buffering"), |
533 ngx_string("X-Accel-Charset"), | 533 ngx_string("X-Accel-Charset"), |
534 ngx_string("Set-Cookie"), | 534 ngx_string("Set-Cookie"), |
535 ngx_string("P3P"), | 535 ngx_string("P3P"), |
536 ngx_null_string | 536 ngx_null_string |
537 }; | |
538 | |
539 | |
540 static ngx_keyval_t ngx_http_fastcgi_cache_headers[] = { | |
541 { ngx_string("HTTP_IF_MODIFIED_SINCE"), ngx_string("") }, | |
542 { ngx_string("HTTP_IF_UNMODIFIED_SINCE"), ngx_string("") }, | |
543 { ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("") }, | |
544 { ngx_string("HTTP_IF_MATCH"), ngx_string("") }, | |
545 { ngx_string("HTTP_RANGE"), ngx_string("") }, | |
546 { ngx_string("HTTP_IF_RANGE"), ngx_string("") }, | |
547 { ngx_null_string, ngx_null_string } | |
537 }; | 548 }; |
538 | 549 |
539 #endif | 550 #endif |
540 | 551 |
541 | 552 |
2285 conf->params_len = prev->params_len; | 2296 conf->params_len = prev->params_len; |
2286 conf->params = prev->params; | 2297 conf->params = prev->params; |
2287 conf->params_source = prev->params_source; | 2298 conf->params_source = prev->params_source; |
2288 conf->headers_hash = prev->headers_hash; | 2299 conf->headers_hash = prev->headers_hash; |
2289 | 2300 |
2301 #if (NGX_HTTP_CACHE) | |
2302 | |
2303 if (conf->params_source == NULL) { | |
2304 | |
2305 if ((conf->upstream.cache == NULL) | |
2306 == (prev->upstream.cache == NULL)) | |
2307 { | |
2308 return NGX_CONF_OK; | |
2309 } | |
2310 | |
2311 /* 6 is a number of ngx_http_fastcgi_cache_headers entries */ | |
2312 conf->params_source = ngx_array_create(cf->pool, 6, | |
2313 sizeof(ngx_keyval_t)); | |
2314 if (conf->params_source == NULL) { | |
2315 return NGX_CONF_ERROR; | |
2316 } | |
2317 } | |
2318 #else | |
2319 | |
2290 if (conf->params_source == NULL) { | 2320 if (conf->params_source == NULL) { |
2291 return NGX_CONF_OK; | 2321 return NGX_CONF_OK; |
2292 } | 2322 } |
2323 | |
2324 #endif | |
2293 } | 2325 } |
2294 | 2326 |
2295 conf->params_len = ngx_array_create(cf->pool, 64, 1); | 2327 conf->params_len = ngx_array_create(cf->pool, 64, 1); |
2296 if (conf->params_len == NULL) { | 2328 if (conf->params_len == NULL) { |
2297 return NGX_CONF_ERROR; | 2329 return NGX_CONF_ERROR; |
2307 { | 2339 { |
2308 return NGX_CONF_ERROR; | 2340 return NGX_CONF_ERROR; |
2309 } | 2341 } |
2310 | 2342 |
2311 src = conf->params_source->elts; | 2343 src = conf->params_source->elts; |
2344 | |
2345 #if (NGX_HTTP_CACHE) | |
2346 | |
2347 if (conf->upstream.cache) { | |
2348 ngx_keyval_t *h, *s; | |
2349 | |
2350 for (h = ngx_http_fastcgi_cache_headers; h->key.len; h++) { | |
2351 | |
2352 for (i = 0; i < conf->params_source->nelts; i++) { | |
2353 if (ngx_strcasecmp(h->key.data, src[i].key.data) == 0) { | |
2354 goto next; | |
2355 } | |
2356 } | |
2357 | |
2358 s = ngx_array_push(conf->params_source); | |
2359 if (s == NULL) { | |
2360 return NGX_CONF_ERROR; | |
2361 } | |
2362 | |
2363 *s = *h; | |
2364 | |
2365 src = conf->params_source->elts; | |
2366 | |
2367 next: | |
2368 | |
2369 h++; | |
2370 } | |
2371 } | |
2372 | |
2373 #endif | |
2374 | |
2312 for (i = 0; i < conf->params_source->nelts; i++) { | 2375 for (i = 0; i < conf->params_source->nelts; i++) { |
2313 | 2376 |
2314 if (src[i].key.len > sizeof("HTTP_") - 1 | 2377 if (src[i].key.len > sizeof("HTTP_") - 1 |
2315 && ngx_strncmp(src[i].key.data, "HTTP_", sizeof("HTTP_") - 1) == 0) | 2378 && ngx_strncmp(src[i].key.data, "HTTP_", sizeof("HTTP_") - 1) == 0) |
2316 { | 2379 { |