- From: Zhong Yu <zhong.j.yu@gmail.com>
- Date: Tue, 27 Nov 2012 19:17:00 -0600
- To: Martin Thomson <martin.thomson@gmail.com>
- Cc: Mark Nottingham <mnot@mnot.net>, "Roy T. Fielding" <fielding@gbiv.com>, HTTP Working Group <ietf-http-wg@w3.org>
In RFC2616, there's a clear distinction between 1. a message without an entity body 2. a message with an entity body of 0 bytes. We should not remove the distinction Quotes from RFC2616 ===== (HTTP messages) consist of ... possibly a message-body. The message-body (if any) of an HTTP message is used to carry the entity-body The presence of a message-body in a request is signaled by the inclusion of a Content-Length or Transfer-Encoding header field in the request's message-headers. messages MAY transfer an entity An entity consists of entity-header fields and an entity-body, although some *responses* will only include the entity-headers. An entity-body is only present in a message when a message-body is present ==== We can conclude that If a request does not have "Content-Length" or "Transfer-Encoding", it does not contain a message body, it does not contain an entity body, it does not contain an entity. If a request has "Content-Length: 0", it contains a message body of 0 bytes, it contain an entity body of 0 bytes, it contain an entity. This is true regardless of the request method. Zhong Yu On Tue, Nov 27, 2012 at 6:10 PM, Martin Thomson <martin.thomson@gmail.com> wrote: > On 27 November 2012 14:58, Mark Nottingham <mnot@mnot.net> wrote: >> When a message is allowed to contain a body, does not have a Transfer-Encoding header field, and has a payload body length that is known to the sender before the message header section has been sent, the sender should send a Content-Length header field to indicate the length of the payload body as a decimal number of octets, unless the message is a request and the method does not define any meaning for the body (in which case the Content-Length header MAY be sent). > > IANAL, so this was hard to parse for me. How about: > > --8<-- > The Content-Length header indicates the size of a message body as a > decimal number of octets. The sender SHOULD set Content-Length if: > o the message is allowed to contain a body, > o the Transfer-Encoding header field is not included, and > o the size of the message body is known at the time that headers are sent. > Messages that do not define a meaning for the body MAY either omit the > Content-Length header field or include a value of 0. > -->8-- > > I'm leery of the "SHOULD" still. It seems weak. I'd almost go with > MUST include and a fourth condition: the message size is unknown and > the end of the body is signaled by closing the connection (in which > case the Connection header MUST include the 'close' token). >
Received on Wednesday, 28 November 2012 01:17:28 UTC