RFC2616bis Issues

$Date: 2007/12/22 23:18:50 $

$Revision: 1.36 $

This is the old issues list pre-WG; please see the new WG issues list.

Statistics

RFC2616 total
active 60 60
closed 34 34
total 94 94

open issues summary

id title target type
i19 Bodies on GET (and other) requests RFC2616 design
i20 Default charsets for text media types RFC2616 design
i21 PUT side effects RFC2616 design
i22 ETag (and other metadata) in status messages RFC2616 design
i23 no-store invalidation RFC2616 design
i24 Requiring Allow in 405 responses RFC2616 design
i27 PUT idempotency RFC2616 design
i28 Connection closing RFC2616 design
i29 Age calculation RFC2616 design
i30 Header LWS RFC2616 design
i32 OPTIONS * RFC2616 design
i33 TRACE security considerations RFC2616 design
i34 Updated reference for URIs RFC2616 design
i35 Split Normative and Informative references RFC2616 design
i37 Vary and non-existant headers RFC2616 design
i38 Mismatched Vary RFC2616 design
i39 ETag uniqueness RFC2616 design
i41 Security Considerations RFC2616 design
i43 Fragment combination / precedence during redirects RFC2616 design
i51 HTTP-date vs. rfc1123-date RFC2616 design
i54 Definition of 1xx Warn-Codes RFC2616 design
i58 What identifies an HTTP resource RFC2616 design
i61 Redirection vs. Location RFC2616 design
i63 Header length limit with encoded words RFC2616 design
i64 WS in quoted-pair RFC2616 design
i69 Clarify "Requested Variant" RFC2616 design
i70 Cacheability of 303 response RFC2616 design
i71 Examples for ETag matching RFC2616 design
i73 Clarification of the term "deflate" RFC2616 design
i74 Character encodings for Headers RFC2616 design
i75 RFC2145 Normative RFC2616 design
i76 Deprecate 305 Use Proxy RFC2616 design
i77 Line folding RFC2616 design
i78 Relationship between 401, Authorization and WWW-Authenticate RFC2616 design
i79 Content-* vs. PUT RFC2616 design
i80 Content-Location isn't special RFC2616 design
i81 Content Negotiation for media types RFC2616 design
i83 OPTIONS * and proxies RFC2616 design
i85 Custom Ranges RFC2616 design
i88 205 Bodies RFC2616 design
i89 If-* and entities RFC2616 design
i90 Delimiting messages with multipart/byteranges RFC2616 design
i93 Repeating single-value headers RFC2616 design
i94 Reason-Phrase BNF RFC2616 design
i13 Updated reference for language tags RFC2616 editorial
i36 ABNF RFC2616 editorial
i40 Header registration RFC2616 editorial
i50 Misc. Typos RFC2616 editorial
i52 Sort 1.3 Terminology RFC2616 editorial
i53 Allow is not in 13.5.2 RFC2616 editorial
i55 Updating to RFC4288 RFC2616 editorial
i56 6.1.1 can be misread as a complete list RFC2616 editorial
i57 Status Code and Reason Phrase RFC2616 editorial
i59 Status Code Registry RFC2616 editorial
i60 13.5.1 and 13.5.2 RFC2616 editorial
i67 Quoting Charsets RFC2616 editorial
i72 Request Method Registry RFC2616 editorial
i82 rel_path not used RFC2616 editorial
i91 Duplicate Host header requirements RFC2616 editorial
i92 Empty Host Headers - BNF RFC2616 editorial

closed issues summary

id title target type draft
i1 HTTP Version should be case sensitive RFC2616 design 01
i3 Chunk Size Definition RFC2616 design 01
i5 Via is a MUST RFC2616 design 01
i6 Fragments allowed in Location RFC2616 design 01
i10 Safe Methods vs Redirection RFC2616 design 01
i11 URI includes query RFC2616 design 01
i12 Invalidation after Update or Delete RFC2616 design 01
i14 Clarification regarding quoting of charset values RFC2616 design 01
i15 No close on 1xx responses RFC2616 design 01
i17 Revise description of the POST method RFC2616 design 01
i18 Cache validators in 206 responses RFC2616 design 01
i25 Accept-Encoding BNF RFC2616 design 04
i31 qdtext BNF RFC2616 design 04
i62 Whitespace in quoted-pair RFC2616 design
i2 'unsafe' characters RFC2616 editorial 01
i4 Message Length RFC2616 editorial 01
i7 Editors Notes RFC2616 editorial 01
i8 Media type registrations RFC2616 editorial 04
i9 Trailer RFC2616 editorial 01
i16 Remove 'identity' token references RFC2616 editorial 01
i26 Import query BNF RFC2616 editorial 04
i42 RFC2606 compliance RFC2616 editorial 02
i44 Unneeded references RFC2616 editorial 04
i45 RFC977 reference RFC2616 editorial 03
i46 references to RFC1700 RFC2616 editorial 03
i47 inconsistency in date format explanation RFC2616 editorial 04
i48 Date reference typo RFC2616 editorial 03
i49 Connection header text RFC2616 editorial 03
i65 Informative references RFC2616 editorial 04
i66 ISO-8859-1 Reference RFC2616 editorial 04
i68 Encoding References Normative RFC2616 editorial 04
i84 Redundant cross-references RFC2616 editorial 04
i86 Normative up-to-date references RFC2616 editorial 04
i87 typo in 13.2.2 RFC2616 editorial 04

Detailed Listing

i1 HTTP Version should be case sensitive RFC2616 - design - closed
Description

In general, quoted string literals in the spec are defined to be case insensitive, but the HTTP Version token should be case sensitive. In section 3.1 it says:

    The version of an HTTP message is indicated by an HTTP-Version field
    in the first line of the message.
    
    HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT

It should add:

    The version of an HTTP message is indicated by an HTTP-Version field
    in the first line of the message.HTTP-Version is case-sensitive.
    
    HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT
Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i2 'unsafe' characters RFC2616 - editorial - closed
Description

In the rules for comparison of URIs [section 3.2.3], it says:

    Characters other than those in the "reserved" and "unsafe" 
    sets (see RFC 2396 [42]) are equivalent to their ""%" HEX HEX" encoding.

but RFC 2396 has no definition of a character set called "unsafe".

The paragraph should read:

    Characters other than those in the "reserved" set (see
    RFC 2396 [42]) are equivalent to their ""%" HEX HEX" encoding.

This was an historical artifact. An earlier HTTP draft had defined a set of 'unsafe' characters, but they were characters that were not valid in a URI, so making a special case in the comparison rule was not needed.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i3 Chunk Size Definition RFC2616 - design - closed
Description

In the description of chunked transfer encoding [section 3.6.1], the syntax for a chunk is given as:

  chunk          = chunk-size [ chunk-extension ] CRLF
  chunk-data CRLF

The accompanying text defines chunk-size incorrectly as:

The chunk-size field is a string of hex digits indicating the size of the chunk.

This doesn't correctly describe what octets the chunk-size field is counting; it should be:

The chunk-size field is a string of hex digits indicating the size of the chunk-data in octets.

(in other words, the chunk length does not include the count of the octets in the chunk header and trailer).

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i4 Message Length RFC2616 - editorial - closed
Description

In the discussion of how to determine the message length [section 4.4], the fourth possibility somehow lost a number of characters. The spec says:

    4.If the message uses the media type "multipart/byteranges", and the
    ransfer-length is not otherwise specified, then this self-
    elimiting media type defines the transfer-length. This media type
    UST NOT be used unless the sender knows that the recipient can arse
    it; the presence in a request of a Range header with ultiple byte-
    range specifiers from a 1.1 client implies that the lient can parse
    multipart/byteranges responses.

It should read:

    4.If the message uses the media type "multipart/byteranges", and the
    transfer-length is not otherwise specified, then this self-
    delimiting media type defines the transfer-length. This media type
    MUST NOT be used unless the sender knows that the recipient can parse
    it; the presence in a request of a Range header with multiple byte-
    range specifiers from a 1.1 client implies that the client can parse
    multipart/byteranges responses.
Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i5 Via is a MUST RFC2616 - design - closed
Description

In the description of the Server header [section 14.38], the Via field is described as a SHOULD:

If the response is being forwarded through a proxy, the proxy application MUST NOT modify the Server response-header. Instead, it SHOULD include a Via field (as described in section 14.45).

It should be a MUST:

If the response is being forwarded through a proxy, the proxy application MUST NOT modify the Server response-header. Instead, it MUST include a Via field (as described in section 14.45).

The requirement is stated correctly in the description of the Via header, [section 14.45].

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i6 Fragments allowed in Location RFC2616 - design - closed
Description

In the description of the Location header [section 14.30], the ABNF for the Location header is given as:

    Location       = "Location" ":" absoluteURI

This and the accompanying text are incorrect because the definition of 'absoluteURI', given in RFC 2396 does not include fragment identifiers. The correct syntax for the Location header is:

    Location       = "Location" ":" absoluteURI [ "#" fragment ]

There are circumstances in which a fragment identifier in a Location URL would not be appropriate:

  • With a 201 Created response, because in this usage the Location header specifies the URL for the entire created resource.
  • With a 300 Multiple Choices, since the choice decision is intended to be made on resource characteristics and not fragment characteristics.
  • With 305 Use Proxy.

At present, the behavior in the case where there was a fragment with the original URI, e.g.: http://host1.example.com/resource1#fragment1 where /resource1 redirects to http://host2.example.com/resource2#fragment2 is 'fragment1' discarded? Do you find fragment2 and then find fragment1 within it? We don't have fragment combination rules.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i7 Editors Notes RFC2616 - editorial - closed
Description

In the references [section 17], markers for the editors notes got left in; they are meaningless and can be safely ignored. They are:

    [jg639] [jg640] [jg641] [jg642] [jg643] [jg644] [jg645] [jg646] [jg647]
Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i8 Media type registrations RFC2616 - editorial - closed
Description

In the description of Internet Media Types in [section 3.7], the wrong RFC is cited for the media type registration process. The text says:

Media-type values are registered with the Internet Assigned Number Authority (IANA [19]). The media type registration process is outlined in RFC 4288 [17]. Use of non-registered media types is discouraged.

But should be:

Media-type values are registered with the Internet Assigned Number Authority (IANA [19]). The media type registration process is outlined in RFC 2048 [17]. Use of non-registered media types is discouraged.

The cited Reference [section 17] is also incorrect; it is:

    [17] Postel, J., "Media Type Registration Procedure", RFC 1590,
    November 1996.

(oddly, the date cited is wrong for that RFC and correct for the right one) It should be:

    [17] Freed, N., Klensin, J., and Postel, J., "Mulitpurpose Internet Mail
        Extensions (MIME) Part Four: Registration Procedure", RFC 2048,
    November 1996.
Origin
(source)
Resolution (incorporated: 04)
Updated.
i9 Trailer RFC2616 - editorial - closed
Description

In [section 13.5.1], which describes End-to-End and Hop-by-Hop headers, the text says:

    The following HTTP/1.1 headers are hop-by-hop headers:
    
    - Connection
    - Keep-Alive
    - Proxy-Authenticate
    - Proxy-Authorization
    - TE
    - Trailers
    - Transfer-Encoding
    - Upgrade

But the correct header name is 'Trailer' (no 's'):

    The following HTTP/1.1 headers are hop-by-hop headers:
    
    - Connection
    - Keep-Alive
    - Proxy-Authenticate
    - Proxy-Authorization
    - TE
    - Trailer
    - Transfer-Encoding
    - Upgrade
Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i10 Safe Methods vs Redirection RFC2616 - design - closed
Description

Section 10.3.2 (301 Moved Permanently) contains the paragraph

    If the 301 status code is received in response to a request other
        than GET or HEAD, the user agent MUST NOT automatically redirect the
    request unless it can be confirmed by the user, since this might
    change the conditions under which the request was issued.

which fails to consider that there are many other request methods that are safe to automatically redirect, and further that the user agent is able to make that determination based on the request method semantics. In particular, the OPTIONS method is always safe to automatically redirect. Unfortunately, the paragraph was written long before there was OPTIONS, and was never updated to reflect the extensibility of methods. The same problem paragraph is found in sections 10.3.3 and 10.3.8.

The above should be replaced with

    If the 301 status code is received in response to a request method
        that is known to be "safe", as defined in section 9.1.1, then the
        request MAY be automatically redirected by the user agent without
        confirmation.  Otherwise, the user agent MUST NOT automatically
    redirect the request unless it is confirmed by the user, since the
    new URI might change the conditions under which the request was issued.

along with similar changes for sections 10.3.3 and 10.3.8. It would also be helpful for each of the method definition sections to specifically define whether or not the method is safe. OPTIONS, GET, and HEAD are all safe in RFC 2616. HTTP extensions like WebDAV define additional safe methods.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i11 URI includes query RFC2616 - design - closed
Description

Section 5.1.2 defines a Request-URI as:

    Request-URI    = "*" | absoluteURI | abs_path | authority

where it gets abs_path by reference to RFC 2396; however, the abs_path in RFC 2396 doesn't include a possible query part:

    hier_part     = ( net_path | abs_path ) [ "?" query ]
    net_path      = "//" authority [ abs_path ]
    abs_path      = "/"  path_segments

The definition of Request-URI should be:

    Request-URI   = "*" | absoluteURI | abs_path [ "?" query ] | authority
Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i12 Invalidation after Update or Delete RFC2616 - design - closed
Description

There is some ambiguity in Section13.10 as to how the word 'only' binds here:

In order to prevent denial of service attacks, an invalidation based on the URI in a Location or Content-Location header MUST only be performed if the host part is the same as in the Request-URI.

The following clarification, along with separating the clause explaining the rationale for the rule, is suggested:

An invalidation based on the URI in a Location or Content-Location header MUST NOT be performed if the host part of that URI differs from the host part in the Request-URI. This helps prevent denial of service attacks.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i13 Updated reference for language tags RFC2616 - editorial - active
Description

RFC 1766, which is referenced by RFC 2616 section 3.10 as the source for its definition of language tags has a BNF has been updated by RFC3066 (a BCP).

RFC 3066 defines these as:

    Language-Tag = Primary-subtag *( "-" Subtag )
    Primary-subtag = 1*8ALPHA
    Subtag = 1*8(ALPHA / DIGIT)

HTTP/1.1 RFC 2616 defines these as:

    language-tag  = primary-tag *( "-" subtag )
    primary-tag   = 1*8ALPHA
    subtag        = 1*8ALPHA

In the meantime, RFC3066 has been obsoleted by RFC4646, and the original grammar production defining subtags seems to be gone:

     
Language-Tag  = langtag
/ privateuse             ; private use tag
/ grandfathered          ; grandfathered registrations

langtag       = (language
["-" script]
["-" region]
*("-" variant)
*("-" extension)
["-" privateuse])

language      = (2*3ALPHA [ extlang ]) ; shortest ISO 639 code
/ 4ALPHA                 ; reserved for future use
/ 5*8ALPHA               ; registered language subtag

extlang       = *3("-" 3ALPHA)         ; reserved for future use

script        = 4ALPHA                 ; ISO 15924 code

region        = 2ALPHA                 ; ISO 3166 code
/ 3DIGIT                 ; UN M.49 code

variant       = 5*8alphanum            ; registered variants
/ (DIGIT 3alphanum)

extension     = singleton 1*("-" (2*8alphanum))

singleton     = %x41-57 / %x59-5A / %x61-77 / %x79-7A / DIGIT
; "a"-"w" / "y"-"z" / "A"-"W" / "Y"-"Z" / "0"-"9"
; Single letters: x/X is reserved for private use

privateuse    = ("x"/"X") 1*("-" (1*8alphanum))

grandfathered = 1*3ALPHA 1*2("-" (2*8alphanum))
; grandfathered registration
; Note: i is the only singleton
; that starts a grandfathered tag

alphanum      = (ALPHA / DIGIT)       ; letters and numbers

So shouldn't RFC2616 (Section 3.10) stop defining these things, and just normatively refer to RFC4626 for the definition of "Language-Tag"?

i14 Clarification regarding quoting of charset values RFC2616 - design - closed
Description

In order to clarify when charset values may be quoted, the following is added to section 3.4:

HTTP uses charset in two contexts: within an Accept-Charset request header (in which the charset value is an unquoted token) and as the value of a parameter in a Content-type header (within a request or response), in which case the parameter value of the charset parameter may be quoted.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i15 No close on 1xx responses RFC2616 - design - closed
Description

Section 14.10 says:

HTTP/1.1 applications that do not support persistent connections MUST include the "close" connection option in every message.

it should say:

An HTTP/1.1 client that does not support persistent connections MUST include the "close" connection option in every request message.

An HTTP/1.1 server that does not support persistent connections MUST include the "close" connection option in every response message that does not have a 1xx (informational) status code.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i16 Remove 'identity' token references RFC2616 - editorial - closed
Description

The "identity" transfer coding was removed, but some references to it were not.

In section 3.6, remove reference to non-existant section

The Internet Assigned Numbers Authority (IANA) acts as a registry for transfer-coding value tokens. Initially, the registry contains the following tokens: "chunked" (section 3.6.1), "identity" (section 3.6.2), "gzip" (section 3.5), "compress" (section 3.5), and "deflate" (section 3.5).

The Internet Assigned Numbers Authority (IANA) acts as a registry for transfer-coding value tokens. Initially, the registry contains the following tokens: "chunked" (section 3.6.1), "gzip" (section 3.5), "compress" (section 3.5), and "deflate" (section 3.5).

In section 4.4 remove 'other than identity' for Transfer-Encoding case since identity is not a valid value.

2.If a Transfer-Encoding header field (section 14.41) is present and has any value other than "identity", then the transfer-length is defined by use of the "chunked" transfer-coding (section 3.6), unless the message is terminated by closing the connection.

2.If a Transfer-Encoding header field (section 14.41) is present, then the transfer-length is defined by use of the "chunked" transfer-coding (section 3.6), unless the message is terminated by closing the connection.

Messages MUST NOT include both a Content-Length header field and a non-identity transfer-coding. If the message does include a non-identity transfer-coding, the Content-Length MUST be ignored.

Messages MUST NOT include both a Content-Length header field and a transfer-coding. If the message does include a transfer-coding, the Content-Length MUST be ignored.

In section 19.4.5 remove 'identity' CTE.

HTTP does not use the Content-Transfer-Encoding (CTE) field of RFC 2045. Proxies and gateways from MIME-compliant protocols to HTTP MUST remove any non-identity CTE ("quoted-printable" or "base64") encoding prior to delivering the response message to an HTTP client.

HTTP does not use the Content-Transfer-Encoding field of RFC 2045. Proxies and gateways from MIME-compliant protocols to HTTP MUST remove any Content-Transfer-Encoding prior to delivering the response message to an HTTP client.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i17 Revise description of the POST method RFC2616 - design - closed
Description

The description of POST was broadened over time, and is not clear. It is clarified by the following changes in Section 9.5:

The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.

The POST method is used to request that the origin server accept the entity enclosed in the request as data to be processed by the resource identified by the Request-URI in the Request-Line.

The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. The posted entity is subordinate to that URI in the same way that a file is subordinate to a directory containing it, a news article is subordinate to a newsgroup to which it is posted, or a record is subordinate to a database.

The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i18 Cache validators in 206 responses RFC2616 - design - closed
Description

In Section 10.2.7 the spec implies that it may be ok to use a weak cache validator in a 206 response. The correct language is more restrictive.

If the 206 response is the result of an If-Range request that used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request.

If the 206 response is the result of an If-Range request, the response SHOULD NOT include other entity-headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request.

Origin
(source)
Resolution (incorporated: 01)
Incorporated from draft-gettys.
i19 Bodies on GET (and other) requests RFC2616 - design - active
Description
Is a request body allowed on GET? Other requests?
Origin
(source)
i20 Default charsets for text media types RFC2616 - design - active
Description

2616 Section 3.7.1 states;

When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP.

However, many, if not all, of the text/* media types define their own defaults; text/plain (RFC2046), for example, defaults to ASCII, as does text/xml (RFC3023).

How do these format-specific defaults interact with HTTP's default? Is HTTP really overriding them?

I'm far from the first to be confused by this text, and I'm sure it's been asked before, but I haven't been able to find a definitive answer. If errata are still being considered, perhaps removing/ modifying this line would be a good start...

Origin
(source)
i21 PUT side effects RFC2616 - design - active
Description

2616 specifically allows PUT to have side effects;

A single resource MAY be identified by many different URIs. For example, an article might have a URI for identifying "the current version" which is separate from the URI identifying each particular version. In this case, a PUT request on a general URI might result in several other URIs being defined by the origin server.

HTTP/1.1 does not define how a PUT method affects the state of an origin server.

and it also says (in the context of PUT)

If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response.

So, if I PUT something to /foo, and it has the side effect if creating /foo;2006-04-03, is the response required to be a 201 Created?

I.e., read literally, the above requirement requires a 201 Created when PUT results in *any* resource being created -- even as a side effect.

This is IMO unnecessarily constraining, and should be relaxed; e.g., changed to something like

Origin
(source)
Proposal 1

"If a new resource is created at the Request-URI, the origin server MUST inform the user agent via the 201 (Created) response."

i22 ETag (and other metadata) in status messages RFC2616 - design - active
Description

It's not clear what the headers in a response to a PUT apply to; for example, does an ETag apply to that response, or the response that would be returned upon a GET?

The same questions apply in other cases where the response serves as a status message.

Proposal 1
i23 no-store invalidation RFC2616 - design - active
Description

Responses to HTTP requests with "Cache-control: no-store" are not cachable. Recently, we came across a cache that does not cache responses to no-store requests but also does not invalidate an older cached entity with the same URL. When future requests stop using no-store, the old cached entity is served.

For example, the following happens in our test case:

  1. Client requests an entity A without using no-store.
  2. Cache proxies the transaction and caches the response (entity A).
  3. Client requests the same entity A using "Cache-control: no-store".
  4. Cache proxies the transaction and does NOT cache the response.
  5. Client requests the same entity A again, without using no-store.
  6. Cache serves the "old" entity A cached in step #2 above.

Does the cache violate the intent of RFC 2616 in step #6? If yes, should that intent be made explicit (I cannot find any explicit rules prohibiting the above behavior).

Origin
(source)
i24 Requiring Allow in 405 responses RFC2616 - design - active
Description

In RFC 2616, section 10.4.6 405 Method Not Allowed:

The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.

which has the effect of requiring that a server advertise all methods to a resource. In some cases, method implementation is implemented across several (extensible) parts of a server and thus not known. In other cases, it may not be prudent to tell an unauthenticated client all of the methods that might be available to other clients.

Origin
(source)
Proposal 1
Change the MUST to MAY in 10.4.6.
i25 Accept-Encoding BNF RFC2616 - design - closed
Description

In section 14.3, the definition of Accept-Encoding is given as follows:

Accept-Encoding  = "Accept-Encoding" ":"
1#( codings [ ";" "q" "=" qvalue ] )

This definition implies that there must be at least one non-null codings. However, just below this definition, one of the examples given has an empty Accept-Encoding field-value:

Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: *
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

Furthermore, the fourth rule for testing whether a content-coding is acceptable mentions the possibility that the field-value may be empty.

Origin
(source)
Proposal 1

The definition for Accept-Encoding should be revised:

Accept-Encoding  = "Accept-Encoding" ":"
                #( codings [ ";" "q" "=" qvalue ] )
Resolution (incorporated: 04)
Proposal 1.
i26 Import query BNF RFC2616 - editorial - closed
Description

In section 3.2.2, http_URL is defined as follows:

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

However, RFC 2616 does not contain a rule called "query". I assume this is meant to be the same "query" that is defined in RFC 2396, since section 3.2.1 incorporates "URI-reference", "absoluteURI", "relativeURI", "port", "host", "abs_path", "rel_path", and "authority" from that specification (but "query" is missing from this list).

Origin
(source)
Proposal 1
Add "query" to the list of imported rules in section 3.2.1.
Resolution (incorporated: 04)
Proposal 1.
i27 PUT idempotency RFC2616 - design - active
Description

It *appears* that RFC3253 changes the idempotency of PUT; is this allowed? RFC3253 doesn't update or obsolete 2616...

I can see a situation where a 3253-naive client decides to retry a timed-out PUT (after all, it's idempotent) and gets some side effects it didn't bargain for.

Origin
(source)
i28 Connection closing RFC2616 - design - active
Description

The phrase "unless the message is terminated by closing the connection" in Section 4.4 is unnecessary.

Section 3.6 uses the same phrase; it is a little confusing. In 4.4 you could almost read it to mean that presence of "Connection: close" would mean that a T-E header should be ignored, which is presumably not the intent (and certainly not the practice).

Origin
(source)
i29 Age calculation RFC2616 - design - active
Description

RFC 2616 says:

Because the request that resulted in the returned Age value must have been initiated prior to that Age value's generation, we can correct for delays imposed by the network by recording the time at which the request was initiated. Then, when an Age value is received, it MUST be interpreted relative to the time the request was initiated... So, we compute:

corrected_initial_age = corrected_received_age + (now - request_time)

I suspect the formula does not match the true intent of the RFC authors. I believe that corrected_initial_age formula counts server-to-client delays twice. It does that because the corrected_received_age component already accounts for one server-to-client delay. Here is an annotated definition from the RFC:

corrected_received_age = max(
now - date_value, # trust the clock (includes server-to-client delay!)
age_value)        # all-HTTP/1.1 paths (no server-to-client delay)

I think it is possible to fix the corrected_initial_age formula to match the intent (note this is the *initial* not *received* age):

corrected_initial_age = max(
now - date_value,                # trust the clock (includes delays)
age_value + now - request_time)  # trust Age, add network delays

There is no need for corrected_received_age.

Moreover, it looks ALL the formulas computing current_age go away with the above new corrected_initial_age definition as long as "now" is still defined as "the current time" (i.e., the time when current_age is calculated):

current_age = corrected_initial_age

So, we end up with a single formula for all cases and all times:

current_age = max(now - date_value, age_value + now - request_time) = = now - min(date_value, request_time - age_value)

It even has a clear physical meaning -- the min() part is the conservative estimate of object creation time.

Origin
(source)
Proposal 1
creation_time = min(date_value, request_time - age_value);
current_age = now - creation_time;
i30 Header LWS RFC2616 - design - active
Description
  1. Is LWS permitted between the field-name and colon?

    The grammar of RFC 2616 suggests that it is, because ":" is a separator character, and thus the rule for implied LWS between a token and a separator applies.

    The wording suggests otherwise, although it is not explicit:

    Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive. The field value MAY be preceded by any amount of LWS, though a single SP is preferred.

    The wording explicit states LWS is permitted after the colon, suggesting that the intention is that it's not permitted before the colon.

    Many authors have taken that interpretion, resulting in most of the servers I looked at not accepting LWS before the colon. (They should probably reject the request, but all of them treat it as an unknown header name including a space in the name token).

    Apache now, and Mozilla, accept LWS at that position.

  2. What about LWS before the field-name?

    At first sight, this doesn't make sense: LWS at the start of the line indicates folding. However, all implementations I looked at accept a line beginning with LWS immediately after the Request-Line or Status-Line. Some of them treat the initial LWS as part of the field-name (they don't enforce the limited character range of tokens), or they skip the LWS.

    Apache doesn't look for and ignore LWS prior to the first field-name. Neither do Squid, thttpd or lighttpd. Mozilla and phttpd do.

    Technically, the grammar disallows LWS before the field-name: Implied LWS is only implied _between_ words and separators.

Both of these inconsistencies between programs, and also that lone CR is treated as LWS by some and not others, lead to potential security holes due to non-compliant messages that claim to be HTTP/1.1. Although it isn't the standard's role to state how a program should respond to every kind of invalid message, it would be good to clarify these points because they do have security implications (which was Apache's stated reason for their change):

  1. Whether LWS is actually permitted between the field-name and colon. (Grammar says it is; wording suggests it isn't. Implementations vary).
  2. Whether LWS is actually permitted before the field-name. (Grammar says it isn't. Implementations vary).
  3. That lone CR in a line is explicitly not allowed and SHOULD (or MUST?) be rejected, for the specific reason that implementations vary as to whether it is treated as LWS, which has security implications for programs which must match on the field-name.
  4. That invalid field-names (such as containing control characters or LWS) SHOULD (or MUST?) be rejected.
Origin
(source)
i31 qdtext BNF RFC2616 - design - closed
Description

RFC 2616 reads:

A string of text is parsed as a single word if it is quoted using double-quote marks.

quoted-string  = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext         = <any TEXT except <">>

The backslash character ("\") MAY be used as a single-character quoting mechanism only within quoted-string and comment constructs.

quoted-pair    = "\" CHAR

I wrote a regular expression based on the RFC 2616 definition, and that allows "foo\" as a quoted-string. That's not intended, is it?

Origin
(source)
Proposal 1

I think the qdtext syntax should say this instead:

qdtext         = <any TEXT except <"> and "\">

(It might also want to say "excluding" instead of "except", for consistency with ctext a few lines earlier).

Resolution (incorporated: 04)
Proposal 1.
i32 OPTIONS * RFC2616 - design - active
Description

I'd like to see a clarification about what clients can expect upon OPTIONS *. In particular, can they expect to find out about *any* method name supported on that server? I'm asking because this doesn't seem to be the case for at least two major server bases, being:

  • Apache (for instance, additional method names supported by mod_dav aren't listed) and
  • generic Java servlet engines (servlet API does not support delegation of requests against "*" to all installed web applications)
Origin
(source)
i33 TRACE security considerations RFC2616 - design - active
Description

There is an HTTP-related security violation approach found/researched by White Hat Security:

PR: http://www.whitehatsec.com/press_releases/WH-PR-20030120.txt
Details: http://www.betanews.com/whitehat/WH-WhitePaper_XST_ebook.pdf

I bet many of you have seen the related advisories/PR. For those who have not, here is the gist:

Modern browsers usually do not allow scripts embedded in HTML to access cookies and authentication information exchanged between HTTP client and server. However, a script can get access to that info by sending a simple HTTP TRACE request to the originating (innocent) server. The user agent will auto-include current authentication info in such request. The server will echo all the authentication information back, for script to read and [mis]use. Apparently, sending an HTTP request is possible via many scripting methods like ActiveX. See the URL above for details.

With numerous XSS (cross-site-scripting) vulnerabilities in user agents, this seems like a real and nasty problem. TRACE method support is optional per RFC 2616, but many popular servers support it. White Hat Security advises server administrators to disable support for TRACE.

Origin
(source)
i34 Updated reference for URIs RFC2616 - design - active
Description

RFC2616 refers to RFC2396, RFC1630, RFC1738, and RFC1808, all of which have been obsoleted by RFC3986.

If the reference is changed, it will important to remember to make a decision about the "mark" production in the former (which are unreserved characters) which have been moved to have reserved status in the latter.

By referencing 2396, HTTP allows these characters unescaped in path segments, etc. If 3986 is referenced as-is, they will be effectively disallowed, thereby effectively making a number of existing HTTP URIs invalid.

This includes the exclamation mark ("!"), asterisk ("*"), single-quote ("'"), and open and close parentheses ("(" and ")").

Origin
(source)
i35 Split Normative and Informative references RFC2616 - design - active
Description
References are now required to be split into "Normative" and "Informative".
i36 ABNF RFC2616 - editorial - active
Description
Update BNF to RFC4234.
i37 Vary and non-existant headers RFC2616 - design - active
Description
  • When an origin server selects the response by looking at a request header, and the header does not exist, is it correct for the server to add the name of that header to Vary?

    For example, suppose a server's logic is like this pseudo-code:

    reponse_headers (Vary) = "Accept-Language"
    
    IF request_headers (Accept-Language) contains "ja" THEN
    serve the japanese page
    ELSE 
    serve the english page
    ENDIF

    What is the correct HTTP response when the request doesn't have an Accept-Language header?