Mercurial > hg > nginx
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) |