- From: Bob Briscoe <bob.briscoe@bt.com>
- Date: Fri, 6 Mar 2015 19:05:18 +0000
- To: <mbelshe@chromium.org>, <fenix@google.com>, <martin.thomson@gmail.com>
- CC: <ietf-http-wg@w3.org>
- Message-ID: <201503061905.t26J5JmY015035@bagheera.jungle.bt.co.uk>
Co-authors & editors, This is the last of my review postings. We're working on a generic framing protocol within the TCP Data. The main reason I was reading HTTP/2 was to understand it as a set of requirements for what we're doing. I don't expect many (any?) of the comments below to change the protocol spec, but if someone could spare the time to answer my questions, it will help us understand what you were trying to do with HTTP/2, so we can better meet its needs in future. I found it very hard to understand the HTTP/2 spec, because it was largely a stream of assertions, with hardly any rationale. I read a book on SPDY to try to understand some of the rationale, but I got a similar barrage of assertions. All that said, you might want to try to improve the spec with some of these answers, because poor comprehensibility leads to bugs, particularly bearing in mind non-English implementers need to understand the spec too. Apologies if these questions have been raised before. I tried to check with a quick search of the archives and I read the IESG reviews, but I may have missed stuff. <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-2.1>2.1. Document Organization "...this specification does not define a completely generic framing layer..." Given the prevalence of HTTP, was the design of HTTP/2 framing designed for hardware (or software) offload (i.e. required to be possible to implement separately from the contents of the frames)? Was this a requirement? It's not mentioned. I'm sure it will be done now that HTTP/2 is specified. A great shame it won't be generic, but that's water under the bridge now. <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-5.1.2>5.1.2. Stream Concurrency " Streams in either of the "reserved" states do not count toward the stream limit." Why? Once reserved, they require stream state. In fact, it would be useful to enumerate the amount of state needed for each stream. <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6>6. Frame Definitions Why the particular set of frame types, and not more or less? This raises the question of why the frame types have all been defined as completely independent. A multi-part frame structure could have been used that constrains the order of frames to that required (I've done a back of envelope design for this). Without structural ordering constraints, it will be necessary to define a very large number of ordering errors (many more than the draft currently states). <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.1>6.1. DATA Why does padding have to be filled with zeros? There are good cryptographic reasons for not requiring this. And random padding could help ensure that retransmissions are significantly different from the original transmission. Why is the pad length and padding field included in flow control? An http receiver (client or intermediate) can discard padding without consuming buffer memory, and an intermediate node can then reconstruct (a potentially different amount of) padding. <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.2>6.2. HEADERS Why is the END_HEADERS flag needed? Given HEADERS frames MUST be contiguous, why can't the Length field of the HEADERS frame specify the length of one frame for all http headers, without all the complexity of CONTINUATION frames and an END_HEADERS flag? <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-5.3.5>5.3.5. Default Priorities Why is the default stream weight 16? <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.3>6.3. PRIORITY "The PRIORITY frame can be sent on a stream in any state, though it cannot be sent between consecutive frames that comprise a single header block" Why? <https://tools.ietf.org/html/draft-ietf-httpbis-http2-16#section-6.5>6.5. SETTINGS " ACK (0x1): [...] When this bit is set, the payload of the SETTINGS frame MUST be empty. Receipt of a SETTINGS frame with the ACK flag set and a length field value other than 0 MUST be treated as a connection error " Why? It would be more efficient, and surely cause no harm, to ack on the same frame as sending a setting in the other direction. <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.6>6.6. PUSH_PROMISE Why is the whole PUSH_PROMISES approach needed? Given a request doesn't have to use the same stream ID as a response. <https://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.7>6.7. PING I don't see the point of the two apparently arbitrary restrictions below. " PING frames are not associated with any individual stream. " Why prevent an implementer from monitoring the round trip of a specific stream? " PING responses SHOULD be given higher priority than any other frame. " This prevents an implementation from using PING to measure the buffer that all other frames have to endure. Bob ________________________________________________________________ Bob Briscoe, BT
Received on Friday, 6 March 2015 19:05:55 UTC