4.3 消息主体 (Message Body)
HTTP 消息的消息主体用来承载请求和响应的实体主体(entity-body)的。这些消息主体(message-body)仅仅当被传输译码头域(Transfer-Encoding)指明的传输编码(transfer-coding)应用于实体主体(entity-body)时才和实体主体相区别,其它情况消息主体和实体主体相同。传输译码头域在 14.41 节阐述。
message-body = entity-body | <entity-body encoded as per Transfer-Encoding>
传输译码头域被用来指明应用程序的传输编码,它是为了保证消息的安全和合适的传输。传输译码(Transfer-Encoding)头域是消息的属性,而不是实体的属性,因此可能会沿着请求/响 应链被添加或删除。(然而,3.6 节描述了一些限制当使用某个传输编码时)
什么时候消息主体(message-body)允许出现在消息中,这根据不同请求和响应来决定的。
请求中消息主体( message-body)的存在是被请求中消息头域中是否存在内容长度( Content-Length ) 或 传 输 译 码 ( Transfer-Encoding ) 头 域 来 通 知 的 。 一 个 消 息 主 体(message-body)不能被包含在请求里如果某种请求方法(见 5.1.1 节)不支持请求里包含实体主体(entity-body)。一个服务器应该能阅读或再次转发请求里的消息主体;如果请求方法不允许包含一个实体主体(entity-body),那么当服务器处理这个请求时消息主体应该被忽略。
对于响应消息,消息里是否包含消息主体依赖相应的请求方法和响应状态码。所有 HEAD 请求方法的请求的响应消息不能包含消息主体,即使实体头域出现在请求里。所有 1XX(信息的),204(无内容的)和 304(没有修改的)的响应都不能包括一个消息主体(message-body)。
所有其他的响应必须包括消息主体,即使它长度可能为零。