comparison src/http/ngx_http_upstream.c @ 5738:c95d7882dfc9

Upstream: cache revalidation using If-None-Match.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 26 Jun 2014 02:35:01 +0400
parents 44b9ab7752e3
children 9d3a9c45fc43
comparison
equal deleted inserted replaced
5737:44b9ab7752e3 5738:c95d7882dfc9
16 static ngx_int_t ngx_http_upstream_cache_send(ngx_http_request_t *r, 16 static ngx_int_t ngx_http_upstream_cache_send(ngx_http_request_t *r,
17 ngx_http_upstream_t *u); 17 ngx_http_upstream_t *u);
18 static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r, 18 static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r,
19 ngx_http_variable_value_t *v, uintptr_t data); 19 ngx_http_variable_value_t *v, uintptr_t data);
20 static ngx_int_t ngx_http_upstream_cache_last_modified(ngx_http_request_t *r, 20 static ngx_int_t ngx_http_upstream_cache_last_modified(ngx_http_request_t *r,
21 ngx_http_variable_value_t *v, uintptr_t data);
22 static ngx_int_t ngx_http_upstream_cache_etag(ngx_http_request_t *r,
21 ngx_http_variable_value_t *v, uintptr_t data); 23 ngx_http_variable_value_t *v, uintptr_t data);
22 #endif 24 #endif
23 25
24 static void ngx_http_upstream_init_request(ngx_http_request_t *r); 26 static void ngx_http_upstream_init_request(ngx_http_request_t *r);
25 static void ngx_http_upstream_resolve_handler(ngx_resolver_ctx_t *ctx); 27 static void ngx_http_upstream_resolve_handler(ngx_resolver_ctx_t *ctx);
365 367
366 { ngx_string("upstream_cache_last_modified"), NULL, 368 { ngx_string("upstream_cache_last_modified"), NULL,
367 ngx_http_upstream_cache_last_modified, 0, 369 ngx_http_upstream_cache_last_modified, 0,
368 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 }, 370 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
369 371
372 { ngx_string("upstream_cache_etag"), NULL,
373 ngx_http_upstream_cache_etag, 0,
374 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
375
370 #endif 376 #endif
371 377
372 { ngx_null_string, NULL, NULL, 0, 0, 0 } 378 { ngx_null_string, NULL, NULL, 0, 0, 0 }
373 }; 379 };
374 380
4790 v->data = p; 4796 v->data = p;
4791 4797
4792 return NGX_OK; 4798 return NGX_OK;
4793 } 4799 }
4794 4800
4801
4802 static ngx_int_t
4803 ngx_http_upstream_cache_etag(ngx_http_request_t *r,
4804 ngx_http_variable_value_t *v, uintptr_t data)
4805 {
4806 if (r->upstream == NULL
4807 || !r->upstream->conf->cache_revalidate
4808 || r->upstream->cache_status != NGX_HTTP_CACHE_EXPIRED
4809 || r->cache->etag.len == 0)
4810 {
4811 v->not_found = 1;
4812 return NGX_OK;
4813 }
4814
4815 v->valid = 1;
4816 v->no_cacheable = 0;
4817 v->not_found = 0;
4818 v->len = r->cache->etag.len;
4819 v->data = r->cache->etag.data;
4820
4821 return NGX_OK;
4822 }
4823
4795 #endif 4824 #endif
4796 4825
4797 4826
4798 static char * 4827 static char *
4799 ngx_http_upstream(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy) 4828 ngx_http_upstream(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)