- From: James M Snell <jasnell@gmail.com>
- Date: Thu, 11 Oct 2012 10:13:33 -0700
- To: ietf-http-wg@w3.org
- Message-ID: <CABP7RbcP8rXG6ArMCMCzoEEKS-aH5aHUbinFqQB-zV7vjr--Rg@mail.gmail.com>
I've been going back through the HTTP binding described in the initial SPDY
draft [1] and going through a variety of options for the header encoding
and the thought struck me.. if headers such as :version, :method and
:scheme are always going to be included in the SYN_STREAM, and these are
always going to have fairly static and well defined values, there's really
no reason at all why those should be encoded as headers in the first place
-- let's just give them fixed positions within the SYN_STREAM block..
[1] http://tools.ietf.org/html/draft-mbelshe-httpbis-spdy-00#section-2.6.1
+------------------------------------+
|1| version | 1 |
+------------------------------------+
| Flags (8) | Length (24 bits) |
+------------------------------------+
|X| Stream-ID (31bits) |
+------------------------------------+
|X| Associated-To-Stream-ID (31bits) |
+------------------------------------+
| Pri|S|Unused| Slot |M| |
+----------------------+ |
| Number of Name/Value pairs (int32) |
+------------------------------------+
| Length of name (int32) |
+------------------------------------+
| Name (string) |
+------------------------------------+
| Length of value (int32) |
+------------------------------------+
| Value (string) |
+------------------------------------+
| (repeats) |
For one, we already have the version field in the SYN_STREAM... we
shouldn't need two separate protocol version identifiers within a single
SYN_STREAM..
This would add one single-bit flag following the priority and one
single-byte fields following the Slot.
The single-bit field following the Priority would indicate whether or not
the SYN_STREAM is secure... this is equivalent to sending
":scheme"="https". This would use up one fo the currently-unused 5-bits
that exist after the priority. (I'm not even yet convinced that this flag
is necessary at all. We might be able to drop the :scheme indicator
completely).
The one-byte field following Slot identifies the HTTP Method. Each method
would be assigned a numeric identifier (GET=0x1, PUT=0x2, etc). New methods
would be registered to get a new identifier (if a server gets a SYN_STREAM
with an unknown method identifier it's no different than if they get a
HTTP/1.1 request with an unknown method name).
Using this approach, we eliminate three special case headers (":version",
":method" and ":scheme") and save at least around 31-bytes per SYN_STREAM.
- James
Received on Thursday, 11 October 2012 17:14:26 UTC