- From: Martin Thomson <martin.thomson@gmail.com>
- Date: Thu, 21 Nov 2013 11:12:41 -0800
- To: HTTP Working Group <ietf-http-wg@w3.org>
Hervé made a few comments on github (https://github.com/http2/http2-spec/issues/305) that I think needed to be made here: Hervé: >>> There are at least to ways of providing ordering between headers: * Using null-separated list of values, and mandating that the ordering of the values in these lists must be preserved. * Relying on the emission order. The only difficulty here is that the ordering of the headers in the reference set can not be chosen by the sending application. However tricks (like double indexed representation) can be used by the encoder to enforce an order. If we are only targeting the ordering of cookies, then using null-separated list of values is sufficient. * It stays in the main HTTP/2.0 spec, therefore is not dependent of the header compression layer. * It allows removing from HPACK the emission ordering constraints. <<< On the first, this contradicts a previous decision. Cookies need to be decomposed into pieces to get compression efficiency (https://github.com/http2/http2-spec/issues/292). The actual ordering requirements are very narrow: http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-25#section-3.2.2 I see three options: 1. A null-delimiter and collapsing all header field instances for the same name into the same value. 2. A requirement on the compression to preserve order (for fields with the same name). The best part about this is that it isn't that difficult to achieve, because the only non-deterministic part of the decoder is the reference set emission. Make that deterministic (emit in same order as last time; emit from highest table index to lowest) and we avoid the need for null-delimited sequences altogether. An encoder then follows an algorithm where it forces emission of header fields as they appear. Items can be left in the reference set if they are in the same order as last time (which requires a little bit of accounting to implement, or you can double-emit the index and avoid the accounting entirely). 3. Avoid the problem altogether and recommend the use of commas for preserving order. The only cases where this doesn't work is for Cookie and Set-Cookie. For those, I know it might sound a little risky for some, but losing ordering might not be a bad thing there, despite what 6265 says.
Received on Thursday, 21 November 2013 19:13:10 UTC