什么是HTTP请求体?

63

在阅读关于POST和GET方法的内容这里,有一句话说“使用POST方法时,它使用HTTP请求正文。这是什么意思?” HTTP请求正文指的是发送到服务器的数据部分。

3个回答

58

HTTP Body Data是在HTTP事务消息头之后立即传输的数据字节,如果有任何头(在HTTP/0.9的情况下不传输任何头)。

大多数HTTP请求都是没有主体的GET请求。但是,模拟具有主体的请求对于正确压力代理代码和测试各种使用这些请求的钩子非常重要。大多数带有主体的HTTP请求使用POST或PUT请求方法。

消息正文

消息正文部分对于HTTP消息而言是可选的,但如果可用,则用于携带与请求或响应相关联的实体正文。如果有关联的实体正文,则通常Content-Type和Content-Length头行指定相关正文的性质。

消息正文是携带实际HTTP请求数据(包括表单数据和上传等)和服务器端的HTTP响应数据(包括文件、图像等)的部分。以下是消息正文的简单内容:

<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

有关HTTP消息和正文的详细信息,请参见w3org链接


Mazzu,当前规范为http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-26.html#rfc.section.3.3。 - Julian Reschke
谢谢Julian,我会仔细阅读的。 :) - Mazzu
当通过PUT POST处理ajax和/或webservices时,消息正文是否等于正文有效负载? - yardpenalty.com

11

以下是html中的<form>标签:

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
  <label>Name: <input name="myTextField" value="Test"></label>
  <label><input type="checkbox" name="myCheckBox"> Check</label>
  <label>Upload file: <input type="file" name="myFile" value="test.txt"></label>
  <button>Send the file</button>
</form>

将发送这个HTTP请求(它是一种HTTP消息的类型):

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465

-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"

Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"

on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plain

Simple file.
-----------------------------8721656041911415653955004498--
POST / HTTP/1.1Content-Length: 465这些行是HTTP头部,而其余的内容——在空行后面——对应于HTTP消息正文(也称为内容)。 那么如何在后端/服务器端访问此数据呢? 不同的服务器语言(例如Node.js、PHP、Go-lang、Rust等)有不同的方法从http post请求中解析http body。下面的示例演示了如何在后端(Node.js服务器)提取数据。
// Node.jsvar data1 = req.body.myTextField;
var data2 = req.body.myCheckBox;
var data3 = req.body.myFile;
⋮

关于正文的更多信息:

正文可以广义地分为两类:

  1. 单资源正文,由两个头部字段Content-TypeContent-Length定义,包含一个文件。
  2. 多资源正文,由多个不同信息块组成的多部分正文。这通常与HTML表单相关联。

来源:


5
一个常见的应用场景是需要以JSON格式提供数据的API。以下是来自Postman的示例代码片段,其中API是Azure Function,请求正文为JSON:
POST /api/ValidateTwitterFollowerCount HTTP/1.1
Host: myazurefunction.azurewebsites.net
Content-Type: application/json
cache-control: no-cache
Postman-Token: XXXXXXX-XXXXX-XXXXXX

{
    "followersCount" : 220,
    "tweettext":"#Stack Overflow rocks",
    "Name": "John Doe"
}

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