mirror of
https://github.com/nginx/nginx.git
synced 2025-06-11 20:53:30 +08:00
Upstream: cache revalidation using If-None-Match.
This commit is contained in:
parent
b812961677
commit
46ac5c760c
@ -573,7 +573,7 @@ static ngx_keyval_t ngx_http_fastcgi_cache_headers[] = {
|
||||
{ ngx_string("HTTP_IF_MODIFIED_SINCE"),
|
||||
ngx_string("$upstream_cache_last_modified") },
|
||||
{ ngx_string("HTTP_IF_UNMODIFIED_SINCE"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("$upstream_cache_etag") },
|
||||
{ ngx_string("HTTP_IF_MATCH"), ngx_string("") },
|
||||
{ ngx_string("HTTP_RANGE"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_RANGE"), ngx_string("") },
|
||||
|
@ -677,7 +677,7 @@ static ngx_keyval_t ngx_http_proxy_cache_headers[] = {
|
||||
{ ngx_string("If-Modified-Since"),
|
||||
ngx_string("$upstream_cache_last_modified") },
|
||||
{ ngx_string("If-Unmodified-Since"), ngx_string("") },
|
||||
{ ngx_string("If-None-Match"), ngx_string("") },
|
||||
{ ngx_string("If-None-Match"), ngx_string("$upstream_cache_etag") },
|
||||
{ ngx_string("If-Match"), ngx_string("") },
|
||||
{ ngx_string("Range"), ngx_string("") },
|
||||
{ ngx_string("If-Range"), ngx_string("") },
|
||||
|
@ -379,7 +379,7 @@ static ngx_keyval_t ngx_http_scgi_cache_headers[] = {
|
||||
{ ngx_string("HTTP_IF_MODIFIED_SINCE"),
|
||||
ngx_string("$upstream_cache_last_modified") },
|
||||
{ ngx_string("HTTP_IF_UNMODIFIED_SINCE"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("$upstream_cache_etag") },
|
||||
{ ngx_string("HTTP_IF_MATCH"), ngx_string("") },
|
||||
{ ngx_string("HTTP_RANGE"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_RANGE"), ngx_string("") },
|
||||
|
@ -507,7 +507,7 @@ static ngx_keyval_t ngx_http_uwsgi_cache_headers[] = {
|
||||
{ ngx_string("HTTP_IF_MODIFIED_SINCE"),
|
||||
ngx_string("$upstream_cache_last_modified") },
|
||||
{ ngx_string("HTTP_IF_UNMODIFIED_SINCE"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_NONE_MATCH"), ngx_string("$upstream_cache_etag") },
|
||||
{ ngx_string("HTTP_IF_MATCH"), ngx_string("") },
|
||||
{ ngx_string("HTTP_RANGE"), ngx_string("") },
|
||||
{ ngx_string("HTTP_IF_RANGE"), ngx_string("") },
|
||||
|
@ -19,6 +19,8 @@ static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_upstream_cache_last_modified(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_upstream_cache_etag(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
#endif
|
||||
|
||||
static void ngx_http_upstream_init_request(ngx_http_request_t *r);
|
||||
@ -367,6 +369,10 @@ static ngx_http_variable_t ngx_http_upstream_vars[] = {
|
||||
ngx_http_upstream_cache_last_modified, 0,
|
||||
NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
|
||||
|
||||
{ ngx_string("upstream_cache_etag"), NULL,
|
||||
ngx_http_upstream_cache_etag, 0,
|
||||
NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
|
||||
|
||||
#endif
|
||||
|
||||
{ ngx_null_string, NULL, NULL, 0, 0, 0 }
|
||||
@ -4792,6 +4798,29 @@ ngx_http_upstream_cache_last_modified(ngx_http_request_t *r,
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_upstream_cache_etag(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data)
|
||||
{
|
||||
if (r->upstream == NULL
|
||||
|| !r->upstream->conf->cache_revalidate
|
||||
|| r->upstream->cache_status != NGX_HTTP_CACHE_EXPIRED
|
||||
|| r->cache->etag.len == 0)
|
||||
{
|
||||
v->not_found = 1;
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
v->valid = 1;
|
||||
v->no_cacheable = 0;
|
||||
v->not_found = 0;
|
||||
v->len = r->cache->etag.len;
|
||||
v->data = r->cache->etag.data;
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user