- From: Ilari Liusvaara <ilariliusvaara@welho.com>
- Date: Fri, 21 Jul 2017 12:33:29 +0300
- To: Willy Tarreau <w@1wt.eu>
- Cc: ietf-http-wg@w3.org
On Fri, Jul 21, 2017 at 11:03:17AM +0200, Willy Tarreau wrote: > On Fri, Jul 21, 2017 at 11:57:20AM +0300, Ilari Liusvaara wrote: > > On Fri, Jul 21, 2017 at 10:39:41AM +0200, Willy Tarreau wrote: > > > On Fri, Jul 21, 2017 at 10:17:44AM +0200, Willy Tarreau wrote: > > > > > > Also I think I found a typo here in 8.1 : > > > > > > An endpoint that receives a HEADERS > > > frame without the END_STREAM flag set after receiving a final (non- > > > informational) status code MUST treat the corresponding request or > > > response as malformed (Section 8.1.2.6). > > > > > > I think it should use s/END_STREAM/END_HEADERS/ given that DATA frames > > > are still allowed here. I can file an errata if confirmed. > > > > I think it is correct, just somewhat confusing. This seem to be > > requirement that there can be at most one header block at the very end > > after headers that sends the final status code. > > But if a DATA frame follows, the END_STREAM is on the DATA frame, not the > headers frame. There's even exactly this example in 8.1.3 page 59. That's > indeed a bit confusing :-/ Those examples are written in bit confusing way. In the last example, the END_STREAM flag on the DATA frame is NOT set. However, the END_STREAM flag on the last HEADERS frame IS set. The last example could be written as: HEADERS(END_HEADERS): :status => 100 extension-field => bar HEADERS(END_HEADERS) :status => 200 content-length => 123 content-type => image/jpeg trailer => Foo DATA() {binary data} HEADERS(END_STREAM,END_HEADERS) foo = bar Also, END_STREAM in HEADERS is bit special in that if HEADERS has END_STREAM but not END_HEADERS, then the stream will go on a bit to receive the CONTINUATION frames until END_HEADERS is asserted. Example: HEADERS(END_HEADERS): :status => 100 extension-field => bar HEADERS(END_HEADERS) :status => 200 content-length => 123 content-type => image/jpeg trailer => Foo, Zot DATA() {binary data} HEADERS(END_STREAM) foo = bar CONTINUATION(END_HEADERS) zot = qux <-- The half-stream is closed here. (But I think CONTINUATION SHOULD NOT be used...). -Ilari
Received on Friday, 21 July 2017 09:33:55 UTC