Subject: draft-ietf-httpbis-p2-semantics section 3.1.3.1 confusion

From: Dave Thaler <[email-masked]>
Date: Thu, 28 Mar 2013 18:26:56 +0000

http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-22#section-3.1.3.1 says:
>   HTTP uses language tags within the Accept-Language and Content-Language fields.
>
>     language-tag = <Language-Tag, defined in [RFC5646], Section 2.1>

Section 3.1.3.1 defines a language tag by reference to RFC5646 section 2.1.

Per http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-22#section-5.3.5 
the Accept-Language header, however, uses a language-range not a language-tag:

     Accept-Language = 1#( language-range [ weight ] )
     language-range  =
               <language-range, defined in [RFC4647], Section 2.1>

Note the different reference, and following that reference we find the explicit statement that:
   A basic language range differs from the language tags defined in
   [RFC4646] only in that there is no requirement that it be "well-
   formed" or be validated against the IANA Language Subtag Registry.

And of course RFC5646 obsoletes RFC4646 but doesn't change the relevant ABNF.

So the Accept-Language tag does not use the language-tag production, 
it uses the looser language-range definition).

The text in section 3.1.3.1 is confusing because it can be misread to imply
that Accept-Language uses the language-tag production.

Suggest:
>   HTTP uses language tags within the Accept-Language and Content-Language fields.
>   The Accept-Language field uses the looser language-range production defined in Section 5.2.5,
>   whereas the Content-Language field uses the stricter language-tag production defined below.
>
>     language-tag = <Language-Tag, defined in [RFC5646], Section 2.1>
 
-Dave