在阅读有关 POST 和 get 方法的内容后这里有这样的声明:“当使用 post 方法时,它使用 HTTP 请求正文。“HTTP 请求正文”是什么意思。?
HTTP 正文数据是在 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 链接
以下 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.1
到 Content-Length: 465
行是 HTTP headers,而空行后面的其余部分则对应于 HTTP 消息正文(也称为内容)。
那么如何在后端/服务器端访问这些数据呢?
不同的服务器语言(例如 Node.js、PHP、Go-lang、Rust...等)有不同的方法从
http body
解析 http post request
。下面的示例演示了如何在后端(Node.js 服务器)提取数据。
// Node.js
⋮
var data1 = req.body.myTextField;
var data2 = req.body.myCheckBox;
var data3 = req.body.myFile;
⋮
来源:
一个常见的用例是需要 JSON 格式数据的 API。下面是来自 Postman 的示例代码片段,其中 API 是 Azure 函数,请求正文是 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"
}
只是说标签内的数据被发送到服务器。看例子:
<html>
<body>
<form method="POST" action="/">
<input type="text" name="title">
<input type="submit" value="Submit">
</form>
</body>
</html>
当我们执行上面的代码时,我们可以看到一个输入框和一个提交按钮。当我们点击提交按钮时,输入的数据将发送到服务器。