]> git.kaiwu.me - nginx.git/commitdiff
HTTP/2: workaround for clients which fail on table size updates.
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 9 Aug 2018 17:12:17 +0000 (20:12 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 9 Aug 2018 17:12:17 +0000 (20:12 +0300)
There are clients which cannot handle HPACK's dynamic table size updates
as added in 12cadc4669a7 (1.13.6).  Notably, old versions of OkHttp library
are known to fail on it (ticket #1397).

This change makes it possible to work with such clients by only sending
dynamic table size updates in response to SETTINGS_HEADER_TABLE_SIZE.  As
a downside, clients which do not use SETTINGS_HEADER_TABLE_SIZE will
continue to maintain default 4k table.

src/http/v2/ngx_http_v2.c

index 09737700a6d383c95f782452935b41feb7e49b85..e777019299ff8c9b22f5271841a5c9f265f9b901 100644 (file)
@@ -270,8 +270,6 @@ ngx_http_v2_init(ngx_event_t *rev)
 
     h2c->frame_size = NGX_HTTP_V2_DEFAULT_FRAME_SIZE;
 
-    h2c->table_update = 1;
-
     h2scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v2_module);
 
     h2c->concurrent_pushes = h2scf->concurrent_pushes;
@@ -2075,6 +2073,11 @@ ngx_http_v2_state_settings_params(ngx_http_v2_connection_t *h2c, u_char *pos,
             h2c->concurrent_pushes = ngx_min(value, h2scf->concurrent_pushes);
             break;
 
+        case NGX_HTTP_V2_HEADER_TABLE_SIZE_SETTING:
+
+            h2c->table_update = 1;
+            break;
+
         default:
             break;
         }