[程序员每日5分钟]你不知道的 POST
2017-01-13 本文已影响404人
anonymous66
很多人在使用 POST 的时候其实是不知道 <b>Content-Type</b> 的,以至于在看一些官方的 API 的时候懵逼了,完全没见过也不知道这个是什么 POST 啊。
黑人问号.jpg那么我们今天,就来学习一下,<b>POST</b> 方式下 <b>Content-Type</b> 的几种方式。
本文后端以 <b>PHP</b> 为例。(以后也都是)
一、application/x-www-form-urlencoded
<b>application/x-www-form-urlencoded</b> 是最常用的方式,普通的表单提交、js异步请求都默认都是通过这种方式。 用$_POST即可获取数据。
报文
POST HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
name=anonymous66&sex=man
服务端代码
var_dump($_POST);
输出
array(2) {
["name"] => string(6) "anonymous66"
["sex"] => string(3) "man"
}
二、multipart/form-data
<b>multipart/form-data</b> 用在有上传文件的时候。$_FILE 获取文件内容,$_POST 获取数据。
报文
POST HTTP/1.1
Host: 127.0.0.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name"
anonymous66
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="sex"
man
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="avater"; filename=""
Content-Type:
----WebKitFormBoundary7MA4YWxkTrZu0gW
服务端代码
var_dump($_POST);
var_dump($_FILES);
输出
array(2) {
["name"] => string(6) "anonymous66"
["sex"] => string(3) "man"
}
array(1) {
["avater"]=> array(5) {
["name"] => string(36) "0CD0A5235EDCDAAB4AFE05B25695E696.png"
["type"] => string(9) "image/png"
["tmp_name"] => string(45) "/Applications/XAMPP/xamppfiles/temp/phpeFfc9e"
["error"] => int(0)
["size"] => int(9485)
}
}
三、raw
raw 可以上传 json、xml、文本 等等。用 php://input 获得内容。
以下是 raw 具体的方式:
text/plain
text/html
text/xml
application/json
application/xml
application/javascirpt
报文
POST HTTP/1.1
Host: 127.0.0.1
Content-Type: application/json
{
"user": "anonymous66",
"sex": "man"
}
服务端代码
var_dump( file_get_contents('php://input') );
输出
string(48) "{ "user": "anonymous66", "sex": "man"}"
四、总结
-
$_POST 可以获 Content-Type 为 application/x-www-form-urlencoded 或者 multipart/form-data 的请求。
-
php://input 允许读取 POST 的原始数据。给内存带来的压力较小。不能用于 enctype="multipart/form-data"
怎么样,学习很简单吧?点个关注、点个喜欢、打赏都是对我的支持。