请求负载和请求体有什么区别?

38

我正在学习HTTP。在我的POST请求中,我使用XML或JSON格式来封装请求有效负载。我想知道的是请求有效负载和请求主体是否意味着同样的事情?

我学习HTTP。在我的POST请求中,我使用XML或JSON格式将请求有效负载放入请求体中。我想知道请求有效负载和请求体是否指的是同一件事情。

1
请通过点击帮助您最多的答案左侧的复选标记来关闭您的问题。 - Satyam
最有帮助的答案不一定完全满足问题本身。 - Daniel Martinez
6个回答

19

定义:payload指包或文件中除了传输时附加的所有头部和描述性元数据之外的“实际数据”。在网络数据包中,头部会附加到有效载荷上以进行传输,然后在目标处丢弃。

编辑:在HTTP协议中,一个http数据包包括http头和http负载。因此,http数据包的负载部分根据请求类型(例如POST vs GET)可能有或没有主体。因此负载和主体不是同一件事情。


4
有效载荷不包括头部和元数据信息。 - Satyam
1
请问这个定义的来源是什么? - Mickäel A.
2
在计算机和电信领域中,有效载荷是指传输数据中实际预期的消息部分。有效载荷不包括任何仅用于促进有效载荷传递的头部或元数据。 - Satyam
2
因为这个回答没有明确回答问题,所以被踩了 - payload 和 body 是同一个东西吗? - tepez
这个维基百科对有效载荷的定义与HTTP RFC 7230系列中的定义不同(请参见我的下面的回答),后者包括元数据(位于标头字段中),这使得该答案不正确。 - Géry Ogam
显示剩余2条评论

10

负载是“包装”正文的内容。

负载是指携带的东西。一个送报员的负载是一堆报纸,而HTTP POST请求的负载就是在“body”中传输的任何内容。


我理解这句话的意思是,当人们说“请求有效载荷”和“请求正文”时,它们的含义相同,这是你的意思吗?可以互换使用“有效载荷”和“正文”这两个词吗? - KajMagnus
不,负载包含正文。 - Dejell
那么什么构成有效载荷呢?头部+正文?还是其他东西?在这个HTTP请求中:GET /abc \n Content-Length:3 \n\n 123 —— 嗯,有效载荷不就是 123 吗?也就是正文? - KajMagnus
负载是您发送的所有内容,包括标头。不确定123来自哪里。通常,GET请求不包含正文。 - Dejell
以一封信为例:纸张上写的文字是有效载荷,而邮票则是头部。头部需要传递信件,但不包含内部消息(有效载荷)。 - Eric Draven

5
我想知道的是请求有效载荷和请求体是否意味着相同的东西?
不,它们有不同的含义:内容(又称有效载荷)是表示(语义概念)的一部分,而主体是消息(语法概念)的一部分。表示作为单个消息传输,包含完整的表示,或作为多个消息传输,包含部分表示。表示包括元数据和数据。消息包括起始行、字段行(包含表示元数据)和主体(将表示数据(内容)原样或传输编码)。
                         +--------+  +----+
complete representation: |metadata|, |data|
                         +--------+  +----+
                              \         \
                          +--------+  +-------+
partial representation 1: |metadata|, |content|
partial representation 2: |metadata|, |content|
…                         |        |  |       |
partial representation N: |metadata|, |content|
                          +--------+  +-------+
                              /          /
                       +-----------+  +----+
message 1: start line, |field lines|, |body|
message 2: start line, |field lines|, |body|
…                      |           |  |    |
message N: start line, |field lines|, |body|
                       +-----------+  +----+

参考资料

RFC 9110: HTTP语义学 定义了术语表示(representation)

3.2. 表示

“表示”是指旨在反映给定资源的过去、当前或期望状态的信息,以可通过协议轻松传输的格式呈现。表示由一组表示元数据和一个可能无限制的表示数据流组成(第8节)。

请注意,该定义独立于HTTP版本,因为它是关于语义的。

RFC 9112: HTTP/1.1 定义了术语消息(message)

2.1. Message Format

An HTTP/1.1 message consists of a start-line followed by a CRLF and a sequence of octets in a format similar to the Internet Message Format [RFC5322]: zero or more header field lines (collectively referred to as the "headers" or the "header section"), an empty line indicating the end of the header section, and an optional message body.

HTTP-message   = start-line CRLF
                 *( field-line CRLF )
                 CRLF
                 [ message-body ]
请注意,定义取决于HTTP的版本,因为它涉及语法。 RFC 9110:HTTP语义定义了术语“内容”:

6.4. 内容

HTTP消息通常作为消息“内容”传输完整或部分表示:一个八位组流在头部段之后发送,由消息框架界定。

这个抽象的内容定义反映了从消息框架中提取出来的数据。例如,HTTP/1.1消息体([HTTP/1.1]第6节)可能由使用分块传输编码的数据流组成——一系列数据块、一个零长度块和一个尾随部分——而同一消息的内容仅包括传输编码解码后的数据流;它不包括块长度、分块框架语法或尾随字段(第6.5节)。

注意:有些字段名带有“Content-”前缀。这是一种非正式的约定;虽然其中一些字段引用上述消息的内容,但其他字段则限定于所选表示(第3.2节)。请参见各个字段的定义以消除歧义。

RFC 9110: HTTP语义学将先前RFC中使用的负载一词替换为内容

B.3. 与RFC 7231的变化

[...]

术语"负载"和"负载正文"已被替换为"内容",以更好地与其在其他地方(例如字段名称)的用法保持一致,并避免与HTTP/2和HTTP/3中的帧负载混淆。(第6.4节)


0

0

头部标识发送数据包的源和目的地,而实际数据即主体被称为有效载荷


1
那么有什么区别呢? - Kacper Cichecki
你还在寻找答案吗? - Faizan Noor

-1

HTTP消息的有效载荷称为正文。 link1

HTTP消息有效载荷正文是在应用传输编码之前发送到HTTP消息正文(如果有)中的数据的信息(“有效载荷”)部分。 如果不使用传输编码,则有效载荷正文和消息正文是相同的!link2

因此,HTTP消息正文和HTTP消息有效载荷正文之间唯一的区别就是编码(但仅当存在时)。 因此,概括请求有效载荷=请求正文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接