http/2 first experiences

Matthew Blissett mblissett at gbif.org
Mon Nov 7 11:48:15 CET 2016


On 04/10/16 16:06, dridi at varni.sh (Dridi Boukelmoune) wrote:
> On Tue, Oct 4, 2016 at 1:31 PM, Tom Anheyer <Tom.Anheyer at berlinonline.de> wrote:
>> Hello,
>>
>> I've setup a little test environment with varnish5 and hitch as TLS
>> offloader. HTTP/2 works for me in FF and Chrome (after upgrading to openssl
>> 1.0.2).

I've done the same — Varnish 5 and Hitch — and we're really pleased to 
see the initial HTTP/2 support.

>> 2016 11:26:36 GMT
>>                                           "Incomplete code in
>> h2_rx_rst_stream(), http2/cache_http2_proto.c line 113:
> So apparently you reached one of the things Varnish doesn't implement
> yet, in this case RST frames. Your browser tried to cancel a request
> and close the related streams and Varnish doesn't support it.
>
> Spoiler alert, your browser may crash with DATA, PUSH_PROMISE and
> CONTINUATION frames.

Part of our motivation for HTTP/2 is to serve map tiles, so we'll have 
to wait until RST frames are handled — browsers send these when tiles 
are scrolled/zoomed off the map before they've loaded.

I've also hit this error, which may be more interesting as it's a failed 
assertion:

"Incomplete code in h2_rx_rst_stream(), http2/cache_http2_proto.c line 113:
thread = (cache-worker)
version = varnish-5.0.0 revision 99d036f
ident = 
Linux,3.10.0-327.36.3.el7.x86_64,x86_64,-junix,-smalloc,-smalloc,-hcritbit,epoll
Backtrace:
   0x4359b6: pan_ic+0x166
   0x45bca9: varnishd() [0x45bca9]
   0x45d121: h2_new_session+0xd01
   0x44d9d1: WRK_Thread+0x481
   0x44de3b: pool_thread+0x2b
   0x7f79246fedc5: libpthread.so.0(+0x7dc5) [0x7f79246fedc5]
   0x7f792442bced: libc.so.6(clone+0x6d) [0x7f792442bced]
req = 0x7f7913096020 {
   vxid = 1, transport = H2
   step = 0x0,
   req_body = R_BODY_INIT,
   err_code = 1, err_reason = (null),
   restarts = 0, esi_level = 0,
   sp = 0x7f7912c0f420 {
     fd = 20, vxid = 1,
     t_open = 1478512502.492168,
     t_idle = 1478512507.188742,
     transport = H2 {
       streams {
         0x00000000 idle
         0x00000003 idle
         0x00000005 idle
         0x00000007 idle
         0x00000009 idle
         0x0000000b idle
         0x00000019 open
         0x00000025 open
       }
     }
client = 192.38.28.2 46264,
   },
   ws = 0x7f79130961f8 {
     id = \"req\",
     {s, f, r, e} = {0x7f7913097ff8, +1048, (nil), +57344},
   },
   http_conn = 0x7f7913096128 {
     fd = 20,
     doclose = NULL,
     ws = 0x7f791b731e38,
     {rxbuf_b, rxbuf_e} = {0x7f791b7313f0, 0x7f791b7313fd},
     {pipeline_b, pipeline_e} = {(nil), (nil)},
     content_length = 0,
     body_status = none,
     first_byte_timeout = 0.000000,
     between_bytes_timeout = 0.000000,
   },
   http[req] = 0x7f7913096290 {
     ws[] = (nil),
     hdrs {
     },
   },
   flags = {
   },
},

But anyway, the server is accessible, should anyone want to fiddle:
- https://api2.gbif-uat.org/v2/map/demo1.html
- http://api2.gbif-uat.org/v2/map/demo1.html
These are both the same instance of Varnish, the first via Hitch, the 
second not.  The server is in Copenhagen, Denmark, sharing a 1Gbit/s 
connection.

I'm following the mailing lists, and will aim to update the server as 
more of HTTP/2 is implemented.

Cheers all,

Matt Blissett




More information about the varnish-misc mailing list