diff src/http/ngx_http_upstream.c @ 3917:2a70484a6580

fix a broken cached response if bypass/no_cache directive values are different, the bug has been introduced in r3700
author Igor Sysoev <igor@sysoev.ru>
date Fri, 13 May 2011 10:05:38 +0000
parents bd1222fb0192
children b4b7bb829fe2
line wrap: on
line diff
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -641,19 +641,6 @@ ngx_http_upstream_cache(ngx_http_request
 
     if (c == NULL) {
 
-        switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
-
-        case NGX_ERROR:
-            return NGX_ERROR;
-
-        case NGX_DECLINED:
-            u->cache_status = NGX_HTTP_CACHE_BYPASS;
-            return NGX_DECLINED;
-
-        default: /* NGX_OK */
-            break;
-        }
-
         if (!(r->method & u->conf->cache_methods)) {
             return NGX_DECLINED;
         }
@@ -674,6 +661,19 @@ ngx_http_upstream_cache(ngx_http_request
 
         ngx_http_file_cache_create_key(r);
 
+        switch (ngx_http_test_predicates(r, u->conf->cache_bypass)) {
+
+        case NGX_ERROR:
+            return NGX_ERROR;
+
+        case NGX_DECLINED:
+            u->cache_status = NGX_HTTP_CACHE_BYPASS;
+            return NGX_DECLINED;
+
+        default: /* NGX_OK */
+            break;
+        }
+
         u->cacheable = 1;
 
         c = r->cache;
@@ -2135,18 +2135,6 @@ ngx_http_upstream_send_response(ngx_http
 
         if (u->cache_status == NGX_HTTP_CACHE_BYPASS) {
 
-            if (ngx_http_file_cache_new(r) != NGX_OK) {
-                ngx_http_upstream_finalize_request(r, u, 0);
-                return;
-            }
-
-            if (u->create_key(r) != NGX_OK) {
-                ngx_http_upstream_finalize_request(r, u, 0);
-                return;
-            }
-
-            /* TODO: add keys */
-
             r->cache->min_uses = u->conf->cache_min_uses;
             r->cache->body_start = u->conf->buffer_size;
             r->cache->file_cache = u->conf->cache->data;