- From: Greg Wilkins <gregw@intalio.com>
- Date: Mon, 1 Sep 2014 08:59:27 +1000
- To: "Roy T. Fielding" <fielding@gbiv.com>
- Cc: HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CAH_y2NEj6HoSGSvOBiapzc1HgkSOTHhBq9cG5v2BVwrbk+O6SA@mail.gmail.com>
On 31 August 2014 03:32, Roy T. Fielding <fielding@gbiv.com> wrote: > I don't see any point in engaging in a self-defeatist argument > Sorry for predicting doom if we debate the detail of these proposals. I just think that regardless of technical merit, they will meet the same fate within the WG as other similar proposals - unless we reconsider the charter or there is some other external influence to stop us iterating on these points. > > BTW, none of those suggestions change semantics. > Well maybe not strictly a semantic change, but B is certainly a significant change that can't be made without forcing further significant change in the protocol (which is not necessarily a bad thing). I think the protocol has a number of highly co-dependent design decision that while they are self consistent, also make it very fragile to change. In this case, the current design has tried to enforce HTTP semantics by making it impossible for the protocol to carry END_STREAM in some locations that are not legal HTTP frame sequences - eg within a partial header/trailer or after a push promise. If the protocol can carry END_STREAM on any frame, then this is a significant change: At the very least, implementations that were assuming the illegal HTTP end streams could not be received would need to explicitly check for them (not a bad thing). Then, if a HTTP stream does receive an END_STREAM in an illegal position, is this a protocol error or just a stream error? There are valid reasons for servers/clients to abort partial HTTP messages so it would be good to make sure the protocol can handle such termination as a stream error and not discard the entire connection. However this means we have to define hpack state handling of partially received headers. We would also have to define what it means to receive a RST_STREAM frame that did not have the END_STREAM flag set? Is this a non-terminal error? a protocol error? or do we still need RST_STREAM frame? Finally, removing END_STREAM from some frame types removes the only significant difference between HEADER frames and CONTINUATIONS frames ( other than the optional priority field that can be sent in it's own frame anyway). Thus there would be no reason to have the continuations frame and we should instead just use multiple HEADER frames. So while I definitely would like to see significant changes/simplification of the framing layer, I think we have to be very careful to check that we have not built a house of cards on those particular foundations. I don't think there are many easy/simple changes that can be made at this level with a wide re-evaluation of the entire design. regards -- Greg Wilkins <gregw@intalio.com> http://eclipse.org/jetty HTTP, SPDY, Websocket server and client that scales http://www.webtide.com advice and support for jetty and cometd.
Received on Sunday, 31 August 2014 22:59:55 UTC