- From: Scott Lawrence <lawrence@agranat.com>
- Date: Mon, 28 Jul 1997 16:03:26 -0400
- To: http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
- Cc: Jim Gettys <jg@zorch.w3.org>, Paul Leach <paulle@microsoft.com>, Henry Sanders <henrysa@exchange.microsoft.com>
JG> Could you update your draft in the mailing list (at JG> http://www.ics.uci.edu/pub/ietf/http/hypermail/1997q2/0063.html) to deal JG> with these comments and resend to the list, so we can last call it? I've appended all of section '3.6 Transfer Codings' with the proposed changes below. In addition, replace the word 'footer' with 'trailer' in the second bullet item in section 8.2 (which discusses a client aborting the in-progress transmission of a request body when an error is received from the server). The resolution also says to move Content-Length from the entity-header list in section 7.1 to general-header in section 4.5. -- Scott Lawrence EmWeb Embedded Server <lawrence@agranat.com> Agranat Systems, Inc. Engineering http://www.agranat.com/ 3.6 Transfer Codings Transfer coding values are used to indicate an encoding transformation that has been, can be, or may need to be applied to an entity-body in order to ensure "safe transport" through the network. This differs from a content coding in that the transfer coding is a property of the message, not of the original entity. transfer-coding = "chunked" | transfer-extension transfer-extension = token All transfer-coding values are case-insensitive. HTTP/1.1 uses transfer coding values in the Transfer-Encoding header field (section 14.40). Transfer codings are analogous to the Content-Transfer-Encoding values of MIME , which were designed to enable safe transport of binary data over a 7-bit transport service. However, safe transport has a different focus for an 8bit-clean transfer protocol. In HTTP, the only unsafe characteristic of message-bodies is the difficulty in determining the exact body length (section 7.2.2), or the desire to encrypt data over a shared transport. The chunked encoding modifies the body of a message in order to transfer it as a series of chunks, each with its own size indicator, followed by an optional trailer containing entity-header fields. This allows dynamically-produced content to be transferred along with the information necessary for the recipient to verify that it has received the full message. Chunked-Body = *chunk last-chunk trailer CRLF chunk = chunk-size [ chunk-ext ] CRLF chunk-data CRLF chunk-size = 1*HEX last-chunk = 1*("0") [ chunk-ext ] CRLF chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] ) chunk-ext-name = token chunk-ext-val = token | quoted-string chunk-data = chunk-size(OCTET) trailer = *entity-header The chunked encoding is ended by any chunk whose size is zero, followed by the trailer, which is terminated by an empty line. The purpose of the trailer is to provide an efficient way to supply information about an entity that is generated dynamically. Applications MUST NOT send header fields in the trailer which are not explicitly defined as being appropriate for the trailer. The Content-MD5 header (section 14.16) is appropriate for the trailer. The Authentication-Info header defined by RFC 2069 (An Extension to HTTP: Digest Access Authentication), or its successor is appropriate for the trailer. An example process for decoding a Chunked-Body is presented in appendix 19.4.6. All HTTP/1.1 applications MUST be able to receive and decode the "chunked" transfer coding, and MUST ignore transfer coding extensions they do not understand. A server which receives an entity-body with a transfer-coding it does not understand SHOULD return 501 (Unimplemented), and close the connection. A server MUST NOT send transfer-codings to an HTTP/1.0 client.
Received on Monday, 28 July 1997 13:06:50 UTC