- From: Johnny Graettinger <jgraettinger@chromium.org>
- Date: Mon, 26 May 2014 14:01:52 -0400
- To: Simone Bordet <simone.bordet@gmail.com>
- Cc: Greg Wilkins <gregw@intalio.com>, Mark Nottingham <mnot@mnot.net>, HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CAEn92Toznr2cJsVJ+tR2Ew8WhMmPmOjLyd7E_bhiSwShwhQw2w@mail.gmail.com>
First, I want to let folks know that Chromium's canary channel is ready for h2-12 interop testing as of last week (pass the "--enable-spdy4" flag, an internal name for HTTP/2). I'll submit a PR to update the wiki. Please take it for a spin, and let me know how it goes! I'm a relative newcomer to HTTP/2 myself, not having heard of it (or HPACK) prior to late January. I knew of SPDY, but hadn't worked with it. Since then I've been working on all things SPDY & HTTP/2 within Chromium and (to a lesser degree) Google's frontend. I've been the primary implementor of HPACK (including Huffman), but haven't had significant input in it's design. My opinion is that it's certainly non-trival, but it's still pretty manageable, and it's no more complex than it needs to be. The spec is well defined, and in practice interop with multiple parties has gone without any gotchas surfacing. It's early still, and they may, but they haven't yet and that's a positive datapoint. I have posted what I think is the real state machine > > ( > http://lists.w3.org/Archives/Public/ietf-http-wg/2014AprJun/att-0720/http2state.txt > ) > > and it is a much more complex beastie. > > I am worried about the diagram posted by Greg above. The number of > ways it could be implemented wrongly is large. > While this looks scary, I think what's actually happening here is that the diagram is composing two independent state machines into one. The HTTP/2 stream state machine (which never transitions on CONTINUATION), with a two-state frame parser state machine (expect continuation / don't expect continuation). There's no reason these machines need to be composed (and implementations I've worked with, don't). I do agree that the close state could be firmed up. There's an third implied, independent state machine for streams in the closed state which bears on handling when to RST, when to ignore, when to GOAWAY with a connection error. Perhaps this can be formalized. For example in SPDY, where header compression is not that complex and > based on libraries widely available for any language (deflate), I > think the issue of header compression is nonetheless the #1 question / > problem / roadblock for SPDY implementers. HTTP 2.0 should simplify > this, not making it more complicated. > Buried in this is perhaps the kernel of objections against HPACK: the specification is too new for off-the-shelf libraries to exist. If a requirement of SPDY were that deflate needed to be implemented from scratch, the road to adoption would have been much longer. Unfortunately CRIME happened, and deflate isn't an option. I suspect if good libraries for HPACK were available, there wouldn't be nearly so much objection. I'll note that the Chromium's license is very permissive, and Chromium's implementation is available here<https://code.google.com/p/chromium/codesearch#chromium/src/net/spdy/hpack_encoder.h&sq=package:chromium>. If there's interest, I'd be happy to work with folks on packaging it as a library. cheers, -johnny
Received on Monday, 26 May 2014 18:02:19 UTC