首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >POST 提交数据的时候参数有哪些类型?

POST 提交数据的时候参数有哪些类型?

作者头像
房东的狗丶
发布2023-02-17 13:58:14
发布2023-02-17 13:58:14
1.1K0
举报
文章被收录于专栏:友人a的笔记丶友人a的笔记丶

前言

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,否则其它情况都会。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 种类
    • 1. application/x-www-form-urlencoded
    • 2. multipart/form-data
    • 3. application/json
    • 4. text/xml
  • 在PHP中
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档