问题:
今天看书看到这一段:
报文(message)
是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
实体(entity)
作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
不甚明白,网上百度了一下,有人解释说和订单和货物的区别。不是很理解这种解释,希望能够解释一下两者的区别,非常感谢了
知乎用户:
报文(message)
是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
实体(entity)
作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
《图解HTTP》的定义基本上与 RFC 2616 HTTP/1.1 的相同。报文的意思不难理解,要理解报文和实体的差别,关键在于对“有效载荷”的理解。
有效载荷(payload)等在 Wikipedia 上的定义:
负载(英语:Payload)是数据传输中所欲传输的实际信息,通常也被称作实际数据或者数据体。信头与元数据,或称为开销数据,仅用于辅助数据传输。
头(header)指的是在一块数据存储或传输之际在头追加的数据,这些信息是对数据区的描述。
元数据(英语:metadata)……为描述其他数据信息的数据。
简单来说,实体主体是我们想要传输的实际信息,实体首部是对该信息的描述,而实体和其它一些信息(请求行/状态行、各种首部字段等等)组织成报文进行传输。
书中有张图很有帮助(上为请求报文,下为响应报文):
图中显示,实体首部字段被包含在报文首部,而实体主体被包含在报文主体中(详见下文),这就是报文和实体的主要联系。
要指出的是,RFC 2616 已经被 RFC 7230 到 7235 取代了。
- 术语实体(entity)被有效载荷(payload)代替。(Clarify entity / representation / variant terminology)
- 来自资源的表示形式(representation)与来自表示形式的有效载荷(payload)这两个术语也得到了区分。( Changes from RFC 2616)
报文(message)和有效载荷(payload)的区别从上图可以看出来一点,但更容易混淆的是 message body 和 payload body。
根据 RFC 7230:
HTTP 报文的报文主体(message body)(如果存在的话)是用来运载请求或响应的有效载荷主体(payload body)的。除非应用了传输编码,报文主体等价于有效载荷主体。
下面以分块传输编码(Chunked transfer encoding)的一个示例来解释
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
25
This is the data in the first chunk
1C
and this is the second one
3
con
8
sequence
0
示例中的有效载荷主体(payload body)为 This is the data in the first chunk、and this is the second one、con 和 sequence 这几行。而报文主体(message body)为第一个空行以后的所有部分,除了有效载荷主体之外,还包括了 25、1C 等行和几个空行(最后为“0/r/n/r/n”,此处显示有误)。
以上翻译参考了 duoani 对 HTTP/1.1 RFC 的中英文对照翻译(推荐)。另外强烈推荐鄭中勝博主的 HTTP 系列文章,我的回答也是基于他的这篇文章:HTTP 酬載。
作者:知乎用户
链接:https://www.zhihu.com/question/263752229/answer/614142472
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。