- From: Simon Yarde <simonyarde@me.com>
- Date: Mon, 03 Feb 2014 13:26:26 +0000
- To: Julian Reschke <julian.reschke@gmx.de>
- Cc: ietf-http-wg@w3.org
Thanks Julian — prompted by this,
>> (c) that coding extension has a "q" parameter,
I can see a way through for a sensible parser architecture; in that rather than trying to uniformly parse parameters, it becomes better to have specific transfer-coding parsers that only recognise registered/known attributes and skip/exclude all other parameters — from a functional-language perspective, it is preferable to have a data-type with a fixed number of parameters rather than an arbitrary-length mapping that *may* contain junk attributes.
> I agree that the ABNF is not optimal here, but it seems it is extremely unlikely that we'll ever see this happening.
I've no wish to nit-pick for the sake of it and I agree it's unlikely, but someone still has to write parsers, and I was aiming to relay my own experience, in that there was still an element of 'divining' that had not improved on RFC2616.
Has this been addressed in HTTP/2.0? My apologies, but I've only had time to take an active interest in the HTTP/1.1 project since it happened to interface with my current project.
Simon Yarde
On 3 Feb 2014, at 13:05, Julian Reschke <julian.reschke@gmx.de> wrote:
> On 2014-02-03 13:44, Simon Yarde wrote:
>>
>>> Why exactly is the ABNF a problem?
>>
>>
>> Because the rule for transfer-parameter is in conflict with t-ranking when the transfer-coding rule is imported to t-codings (copied below).
>>
>> Is the protocol trying to say that the transfer-extension parser must halt if is sees anything matching a "q" attribute? I.e.
>>
>> -- > attribute = token ; except "q"
>>
>>
>> -- > transfer-coding = "chunked" ; Section 4.1
>> -- > / "compress" ; Section 4.2.1
>> -- > / "deflate" ; Section 4.2.2
>> -- > / "gzip" ; Section 4.2.3
>> -- > / transfer-extension
>> -- > transfer-extension = token *( OWS ";" OWS transfer-parameter )
>> -- >
>> *- > transfer-parameter = attribute BWS "=" BWS value
>> -- > attribute = token
>> -- > value = token / quoted-string
>>
>> -- > TE = #t-codings
>> *- > t-codings = "trailers" / ( transfer-coding [ t-ranking ] )
>> *- > t-ranking = OWS ";" OWS "q=" rank
>> -- > rank = ( "0" [ "." 0*3DIGIT ] )
>> -- > / ( "1" [ "." 0*3("0") ] )
>>
>>
>> As a side-note on tolerance, I was also aiming to highlight that client libs are likely to construct dictionaries with arbitrary ordering of parameters (in languages where dict ordering is not guaranteed), and thus the t-coding value will likely occur anywhere in a list of parameter-like values — but yes, I do note that the rule states that t-ranking *follows* a transfer-coding (and any attendant transfer-parameters), and it would be an error to include any more text after a t-ranking.
>> ...
>
> Yes.
>
> In practice, all of this only becomes relevant if people (a) use qvalues on TE, (b) use a coding extension that has parameters, (c) that coding extension has a "q" parameter, and (d) that parameter does not appear last.
>
> I agree that the ABNF is not optimal here, but it seems it is extremely unlikely that we'll ever see this happening.
>
> Best regards, Julian
Received on Monday, 3 February 2014 13:27:00 UTC