http报文和实体的差别?(知乎问答)

问题:

今天看书看到这一段:
报文(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 取代了

报文(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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值