logo  

跟我一起读RFC

跟我一起读RFC
作者: 陈安廉

摘要:软件开发进阶系列


4.3 消息主体 (Message Body)


2020-12-02 13:55:17

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)。

所有其他的响应必须包括消息主体,即使它长度可能为零。