post提交数据的方式,主要体现在http协议头上的Content-Type字段,不同的Content-Type对应不同的http请求体,与之相应的php接收数据方法也不同。
1.application/x-www-form-urlencoded
html中的form表单,如果不设置enctype属性,就默认用该方式提交数据。
Content-Type: application/x-www-form-urlencoded
发送的数据数据进行了urlencode编码
可以使用$_POST获取数据。
2.multipart/form-data
html中的form也可以设置这种方式上传数据
Content-Type: multipart/form-data;
发送的数据不会进行urlencode编码;可以使用$_POST获取数据
application/x-www-form-urlencoded方式会对数据进行urlencode而multipart/form-data则不会。
所以如果发送大段汉字时,使用后者可能会让请求长度变小
P.S:发送文件时,必须使用该方式(enctype=“multipart/form-data”)
3.application/json
content-type有application/json 无法通过html的form形式发送。
Content-Type: application/json;
浏览器传来的是raw形式的数据,整个就是个编码的JSON,所以$_POST是取不到值的
$a = file_get_contents(“php://input”); 之后进行json_decode
可以使用php://input接收数据:
早先的php版本,还可以从$GLOBALS[‘HTTP_RAW_POST_DATA’]获取数据,但php7之后,不再支持这种方式
发送 | 接收 |
---|---|
application/x-www-form-urlencoded | $_POST |
multipart/form-data(数据) | $_POST |
multipart/form-data(文件) | $_FILES |
raw | php://input |
共有 0 条评论