http2 broken

Maxim Dounin mdounin at mdounin.ru
Wed Jul 11 17:02:05 UTC 2018


Hello!

On Wed, Jul 11, 2018 at 08:56:56PM +0800, 洪志道 wrote:

> But there are still some clients use the old version.
> Is it a way to be compatible with it?
> Or other suggestions?
> @Maxim Dounin <mdounin at mdounin.ru>

As I already wrote in ticket #1397, we can try introducing a 
workaround in nginx, but I'm not convinced it worth the effort and, 
more importantly, associated downsides for non-broken clients.

# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1531328359 -10800
#      Wed Jul 11 19:59:19 2018 +0300
# Node ID f44e74d331885dce8682d2a9802eb707be7ae86f
# Parent  54683f650cbdcd73f7f8d845c843295978da5a85
HTTP/2: workaround for clients which fail on table size updates.

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.

diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c
--- a/src/http/v2/ngx_http_v2.c
+++ b/src/http/v2/ngx_http_v2.c
@@ -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_ht
             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;
         }

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx-devel mailing list