>From a compressibility / redundancy reduction standpoint, it makes sense
to have the parts of the URI able to be individually addressed within
the frame, in a similar way to the other fields.
There are many sites where every page is just index.php?id=xxxx with
differing values for xxxx
Also why transmit the host every request when it hardly ever changes.
Therefore sending an aggregated URI, which needs to be parsed at the
other end (or in the middle) is an idea I don't like.
Even if it makes it simpler to do URI-based routing decisions, well I'm
not convinced that is a good enough reason. Mostly I would expect
switching to be done on the host part anyway.
It also doesn't make much sense to send methods as textual names. A
simple byte would do, reserving the value of 0xFF to indicate a textual
name follows. All other values being registered methods. If 256
methods aren't enough, maybe we need to re-evaluate our designs. There
could even be more information coded into method binary values, like
reserving a bit in it for "safety" or "idempotency" or one for
"invalidates cache" or "can have body" etc so that an intermediary need
not necessarily understand the method to know what to do with it.
Adrien
------ Original Message ------
From: "Amos Jeffries" <squid3@treenet.co.nz>
To: "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
Sent: 1/02/2013 10:47:50 p.m.
Subject: Re: Do we kill the "Host:" header in HTTP/2 ?
>On 1/02/2013 8:09 p.m., James M Snell wrote:
>>One proposal on this particular topic...
>>
>>We can combine the :scheme, :method, :host and :path header fields
>>into a single :req Header with a compact binary encoding and require
>>that this single header always appear first in request header blocks.
>>
>>+------------------------------+
>>|S|len(method)|method|len(host)|
>>+-+-------+----+---------+-----+
>>| host | len(path) | path |
>>+------------------------------+
>>
>>S = Single bit, when set, scheme = https, when not set, scheme = http
>>len(method) = 7 bit length of method name
>>method = name of method
>>len(host) = uvarint(host)
>>host = host
>>len(path) = uvarint(path)
>>path = path
>>
>
>This makes several assumptions which are false and will cause a lot of
>trouble:
> 1) scheme of URI is always http(s)://.
> 2) port is always the default scheme port.
> 3) there is never a query string attached
> 4) there is never a fragment attached
>
>It also ignores that abomination otherwise known as the '*' URI.
>IMHO, this is a good loss, we could require OPTIONS method on the '/'
>URI with the current machines hostname or IP do the equivalent and save
>some parser complexity + CPU checking the * cases on every request.
>
>
>Amos
>