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 {