- From: Richard Barnes <rlb@ipv.sx>
- Date: Thu, 30 Jan 2014 18:37:21 -0800
- To: Mark Nottingham <mnot@mnot.net>
- Cc: Roy Fielding <fielding@gbiv.com>, HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CAL02cgQ=5jU15tuv_7uXCZj+FGH5F6R-JZh4NEReedo-Jsji+g@mail.gmail.com>
WFM On Thu, Jan 30, 2014 at 6:25 PM, Mark Nottingham <mnot@mnot.net> wrote: > LGTM. Anyone have a problem with this? > > > On 25 Jan 2014, at 9:32 am, Roy T. Fielding <fielding@gbiv.com> wrote: > > > In response to a Richard Barnes (IESG) comment on p1: > > > > http://trac.tools.ietf.org/wg/httpbis/trac/ticket/551 > > > > I have made some changes to the requirements around sending and > > processing received trailer fields. A complete diff is at > > > > http://trac.tools.ietf.org/wg/httpbis/trac/changeset/2580 > > > > but the important design bits are in p1 4.1.2 (Chunked Trailer Part): > > > > OLD: > > A sender MUST NOT generate a trailer that contains a field which > > needs to be known by the recipient before it can begin processing the > > message body. For example, most recipients need to know the values > > of Content-Encoding and Content-Type in order to select a content > > handler, so placing those fields in a trailer would force the > > recipient to buffer the entire body before it could begin, greatly > > increasing user-perceived latency and defeating one of the main > > advantages of using chunked to send data streams of unknown length. > > A sender MUST NOT generate a trailer containing a Transfer-Encoding, > > Content-Length, or Trailer field. > > > > A server MUST generate an empty trailer with the chunked transfer > > coding unless at least one of the following is true: > > > > 1. the request included a TE header field that indicates "trailers" > > is acceptable in the transfer coding of the response, as > > described in Section 4.3; or, > > > > 2. the trailer fields consist entirely of optional metadata and the > > recipient could use the message (in a manner acceptable to the > > generating server) without receiving that metadata. In other > > words, the generating server is willing to accept the possibility > > that the trailer fields might be silently discarded along the > > path to the client. > > > > The above requirement prevents the need for an infinite buffer when a > > message is being received by an HTTP/1.1 (or later) proxy and > > forwarded to an HTTP/1.0 recipient. > > > > NEW: > > A sender MUST NOT generate a trailer that contains a field necessary > > for message framing (e.g., Transfer-Encoding and Content-Length), > > routing (e.g., Host), request modifiers (e.g., controls and > > conditionals in Section 5 of [Part2]), authentication (e.g., see > > [Part7] and [RFC6265]), response control data (e.g., see Section 7.1 > > of [Part2]), or determining how to process the payload (e.g., > > Content-Encoding, Content-Type, Content-Range, and Trailer). > > > > When a chunked message containing a non-empty trailer is received, > > the recipient MAY process the fields (aside from those forbidden > > above) as if they were appended to the message's header section. A > > recipient MUST ignore (or consider as an error) any fields that are > > forbidden to be sent in a trailer, since processing them as if they > > were present in the header section might bypass external security > > filters. > > > > Unless the request includes a TE header field indicating "trailers" > > is acceptable, as described in Section 4.3, a server SHOULD NOT > > generate trailer fields that it believes are necessary for the user > > agent to receive. Without a TE containing "trailers", the server > > ought to assume that the trailer fields might be silently discarded > > along the path to the user agent. This requirement allows > > intermediaries to forward a de-chunked message to an HTTP/1.0 > > recipient without buffering the entire response. > > > > > > and in the pseudo-code of 4.1.3 (Decoding Chunked): > > > > OLD: > > read header-field > > while (header-field not empty) { > > append header-field to existing header fields > > read header-field > > } > > > > NEW: > > read trailer field > > while (trailer field is not empty) { > > if trailer field is allowed to be sent in a trailer, > > append trailer field to existing header fields > > read trailer-field > > } > > > > > > Please let us know if there are any problems with these changes. > > > > > > Cheers, > > > > Roy T. Fielding <http://roy.gbiv.com/> > > Senior Principal Scientist, Adobe <https://www.adobe.com/> > > > > > > -- > Mark Nottingham http://www.mnot.net/ > > > >
Received on Friday, 31 January 2014 02:37:50 UTC