On 21.09.2018 15:58, Maxim Dounin wrote:

Allow 1xx 2xx 3xx 4xx 5xx codes in xxxxx_cache_valid directives.

For example, config fragment

      fastcgi_cache_valid 200 201 202 203 204 205 206 207 208 226 5m;
      fastcgi_cache_valid 300 301 302 303 304 305 306 307 308 10m;

now can be rewritten as

      fastcgi_cache_valid 2xx 5m;
      fastcgi_cache_valid 3xx 10m;

I cannot say I like this change.  Cacheability of various response
codes vary widely, and caching then "in bulk" in most cases is a
bad idea.

In particular, caching of 201 is always wrong as it is only
expected to be returned to non-cacheable POST and PUT requests.
Caching 206 is wrong unless you use "Ranges" in the cache key.
And caching 304 is wrong unless you've laso included
If-Modified-Since and If-None-Match headers in the cache key.

As such, I would rather refrain from introducing these shortcuts,
as they looks rather dangerous for the unwary.

Ok, thank you for detailed explanation.

What about adding 307 and 308 to list of default response codes?

# HG changeset patch
# User Gena Makhomed <g...@csdoc.com>
# Date 1537543090 -10800
#      Fri Sep 21 18:18:10 2018 +0300
# Node ID c23c4b7822ae8b100c0add10d6a334f773f05c80
# Parent  87d2ea860f380dc8418c97c0163412f53c2d008e
Add 307 and 308 to default response codes for xxxxx_cache_valid.

If only caching time is specified

    fastcgi_cache_valid 5m;

then only 200, 301, 302, 307 and 308 responses are cached.

diff -r 87d2ea860f38 -r c23c4b7822ae src/http/ngx_http_file_cache.c
--- a/src/http/ngx_http_file_cache.c    Mon Sep 10 18:57:39 2018 +0300
+++ b/src/http/ngx_http_file_cache.c    Fri Sep 21 18:18:10 2018 +0300
@@ -2624,7 +2624,7 @@
     ngx_uint_t                i, n;
     ngx_array_t             **a;
     ngx_http_cache_valid_t   *v;
-    static ngx_uint_t         statuses[] = { 200, 301, 302 };
+    static ngx_uint_t         statuses[] = { 200, 301, 302, 307, 308 };

     a = (ngx_array_t **) (p + cmd->offset);

@@ -2647,7 +2647,7 @@

     if (n == 1) {

-        for (i = 0; i < 3; i++) {
+        for (i = 0; i < 5; i++) {
             v = ngx_array_push(*a);
             if (v == NULL) {
                 return NGX_CONF_ERROR;
@@ -2669,7 +2669,7 @@
         } else {

             status = ngx_atoi(value[i].data, value[i].len);
-            if (status < 100) {
+            if (status < 100 || status > 599) {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                                    "invalid status \"%V\"", &value[i]);
                 return NGX_CONF_ERROR;
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to