在阅读关于POST和GET方法的内容这里,有一句话说“使用POST方法时,它使用HTTP请求正文。这是什么意思?” HTTP请求正文指的是发送到服务器的数据部分。
在阅读关于POST和GET方法的内容这里,有一句话说“使用POST方法时,它使用HTTP请求正文。这是什么意思?” HTTP请求正文指的是发送到服务器的数据部分。
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链接
以下是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头部,而其余的内容——在空行后面——对应于HTTP消息正文(也称为内容)。
那么如何在后端/服务器端访问此数据呢?
不同的服务器语言(例如Node.js、PHP、Go-lang、Rust等)有不同的方法从http post请求
中解析http body
。下面的示例演示了如何在后端(Node.js服务器)提取数据。// Node.js
⋮
var data1 = req.body.myTextField;
var data2 = req.body.myCheckBox;
var data3 = req.body.myFile;
⋮
来源:
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"
}