POST 提交数据的时候参数有哪些类型?
前言
1. HTTP 协议是以 ASCII 码 传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。
2. 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须 使用什么编码方式 。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
3. 数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。
种类
1. application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
请求头内容类型为:Content-Type: application/x-www-form-urlencoded;charset=utf-8
提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
一般的POST操作不指名类型时默认为该类型。
2. multipart/form-data
这也是常见的post请求方式,一般用来上传文件,各大服务器的支持也比较好。所以我们使用表单上传文件时,必须让<form>表单的enctype属性值为 multipart/form-data.
请求头内容类型为:Content-Type: application/ multipart/form-data;
注意:以上两种方式:application/x-www-form-urlencoded和multipart/form-data都是浏览器原生支持的。
3. application/json
用来告诉服务端消息主体是序列化的JSON字符串.
4. text/xml
代表提交的是xml消息
在PHP中
仅在Coentent-Type取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST,
PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA (使用这个变量需要特殊设置php.ini),
只有Coentent-Type为multipart/form-data的时候,PHP才不会将http请求数据包中的,相应数据填入php://input,否则其它情况都会。
相关文章
- 大数据技术是如何发展的?
- 数据分析,这样满足运营的需求
- 不可忽视的大数据分析技术十大趋势
- Cloudera持续加速数据编织及数据湖仓创新,扩大数据管理领导地位
- 重视数据思维,Commvault即将举办Connections 2022
- 大数据基础架构Hadoop,终于有人讲明白了
- 大数据助力出版业发展
- BI系统中为什么会有很多快照表
- Windows 备份和克隆工具 Macrium Reflect 免费版 8.0.7279 发布
- 利用大数据分析提高客户支持的五种有效方法
- RabbitMQ是如何实现消息路由的?
- w 命令的解释与示例
- 在 Linux 命令行中格式化输出 xml
- 微软 Windows 10 正式版 Build 19045.2486(KB5022282)发布
- 商业智能软件有什么作用?
- 关于 GNU/Linux 操作系统的十个神话
- Oh My Zsh 和 Powerlevel10k:天作之合
- React 的一些优秀安全实践
- Linux 中使用 traceroute 命令跟踪目标地址
- 系统调用导致网络收包卡顿的问题分析