# HG changeset patch # User Igor Sysoev # Date 1185981846 0 # Node ID d1dc7ef7c3ce59c08b4fb63b5afef6b561d6909f # Parent b7a8c9fe2337b1031b1dc801e17f1b780ebb029b move "Cache-Control" header code to specific handler diff -r b7a8c9fe2337 -r d1dc7ef7c3ce src/http/modules/ngx_http_headers_filter_module.c --- a/src/http/modules/ngx_http_headers_filter_module.c Wed Aug 01 14:22:12 2007 +0000 +++ b/src/http/modules/ngx_http_headers_filter_module.c Wed Aug 01 15:24:06 2007 +0000 @@ -33,7 +33,6 @@ typedef struct { time_t expires; - ngx_str_t cache_control; ngx_array_t *headers; } ngx_http_headers_conf_t; @@ -44,7 +43,7 @@ #define NGX_HTTP_EXPIRES_MAX -2147483644 -static ngx_int_t ngx_http_add_header(ngx_http_request_t *r, +static ngx_int_t ngx_http_add_cache_control(ngx_http_request_t *r, ngx_http_header_val_t *hv, ngx_str_t *value); static ngx_int_t ngx_http_set_last_modified(ngx_http_request_t *r, ngx_http_header_val_t *hv, ngx_str_t *value); @@ -61,6 +60,8 @@ static ngx_http_set_header_t ngx_http_set_headers[] = { + { ngx_string("Cache-Control"), 0, ngx_http_add_cache_control }, + { ngx_string("Last-Modified"), offsetof(ngx_http_headers_out_t, last_modified), ngx_http_set_last_modified }, @@ -251,38 +252,6 @@ } } - if (conf->cache_control.len) { - - ccp = r->headers_out.cache_control.elts; - - if (ccp == NULL) { - - if (ngx_array_init(&r->headers_out.cache_control, r->pool, - 1, sizeof(ngx_table_elt_t *)) - != NGX_OK) - { - return NGX_ERROR; - } - } - - ccp = ngx_array_push(&r->headers_out.cache_control); - if (ccp == NULL) { - return NGX_ERROR; - } - - cc = ngx_list_push(&r->headers_out.headers); - if (cc == NULL) { - return NGX_ERROR; - } - - cc->hash = 1; - cc->key.len = sizeof("Cache-Control") - 1; - cc->key.data = (u_char *) "Cache-Control"; - cc->value = conf->cache_control; - - *ccp = cc; - } - if (conf->headers) { h = conf->headers->elts; for (i = 0; i < conf->headers->nelts; i++) { @@ -329,6 +298,45 @@ static ngx_int_t +ngx_http_add_cache_control(ngx_http_request_t *r, ngx_http_header_val_t *hv, + ngx_str_t *value) +{ + ngx_table_elt_t *cc, **ccp; + + ccp = r->headers_out.cache_control.elts; + + if (ccp == NULL) { + + if (ngx_array_init(&r->headers_out.cache_control, r->pool, + 1, sizeof(ngx_table_elt_t *)) + != NGX_OK) + { + return NGX_ERROR; + } + } + + ccp = ngx_array_push(&r->headers_out.cache_control); + if (ccp == NULL) { + return NGX_ERROR; + } + + cc = ngx_list_push(&r->headers_out.headers); + if (cc == NULL) { + return NGX_ERROR; + } + + cc->hash = 1; + cc->key.len = sizeof("Cache-Control") - 1; + cc->key.data = (u_char *) "Cache-Control"; + cc->value = *value; + + *ccp = cc; + + return NGX_OK; +} + + +static ngx_int_t ngx_http_set_last_modified(ngx_http_request_t *r, ngx_http_header_val_t *hv, ngx_str_t *value) { @@ -396,10 +404,6 @@ NGX_HTTP_EXPIRES_OFF : prev->expires; } - if (conf->cache_control.data == NULL) { - conf->cache_control = prev->cache_control; - } - if (conf->headers == NULL) { conf->headers = prev->headers; } @@ -493,11 +497,6 @@ value = cf->args->elts; - if (ngx_strcasecmp(value[1].data, (u_char *) "cache-control") == 0) { - hcf->cache_control = value[2]; - return NGX_CONF_OK; - } - if (hcf->headers == NULL) { hcf->headers = ngx_array_create(cf->pool, 1, sizeof(ngx_http_header_val_t));