POST数据时的几种格式
POST 数据时的几种格式
POST 数据时,通过 Content-Type 来指定数据格式。
关于 Content-Type:
在请求时:通过指定 Content-Type 来告诉服务器发送的数据类型
在响应时:服务器通过 Content-Type 告知浏览器返回的数据的格式
POST 数据时常见的 Content-Type
application/x-www-form-urlencoded
它是 HTML 中表单提交时的默认类型。(当然,也可通过表单的 enctype 属性指定其他类型),也是 jQuery 和 Zepto 库默认的 POST 格式。
它提交的数据主体会被编码成键值对的形式,即:key1=value1&key2=value2&key3=value3
例子:
<form action="https://httpbin.org/anything" method="post"> <p>用户名:<input type="text" name="username"></p> <p>邮箱:<input type="text" name="email"></p> <p>密码:<input type="password" name="password"></p> <button type="submit">提交</button> </form>
如上 HTML 代码,点击提交按钮,查看 POST 的请求头,会发现:
Content-Type
为application/x-www-form-urlencoded
此外,请求有效主体载荷(payload)的特殊字符会使用 URLEncode 编码:
username=user+name&email=example%40email.com&password=password
比如,上面实例中的
{: id="20230206010832-znzlu6p" updated="20230206010832"}空格
被编码为+
号,邮箱的@
符号被编码为%40。
multipart/form-data
multipart/form-data
也是很常见的 Content-Type 类型,一般用于提交文件、非 ASNI 数据、二进制数据。当我们在使用表单上传文件时,必须设置表单的 enctype 属性为 multipart/form-data。
在上面的表单基础上,新增了一个上传头像的 input 元素。
<form action="https://httpbin.org/anything" method="post" enctype="multipart/form-data">
<p>用户名:<input type="text" name="username"></p>
<p>邮箱:<input type="text" name="email"></p>
<p>密码:<input type="password" name="password"></p>
<p>上传头像:<input type="file" name="avatar"></p>
<button type="submit">提交</button>
</form>
请求有效载荷(payload)为
-----------------------------162929654918621149224132436261
Content-Disposition: form-data; name="username"
user name
-----------------------------162929654918621149224132436261
Content-Disposition: form-data; name="email"
example@email.com
-----------------------------162929654918621149224132436261
Content-Disposition: form-data; name="password"
password
-----------------------------162929654918621149224132436261
Content-Disposition: form-data; name="avatar"; filename="avatar.jpg"
Content-Type: image/jpeg
ÿØÿà//后面的数据省略
multipart/form-data
数据包括多个部分,每一个部分使用一串 boundary 进行分隔,下一行是 Content-Disposition
消息头,它的值固定为 form-data,后面是附加参数(name 或 filename)。
隔一个空行后就是消息主体。
{: updated="20230206010842" id="20230206010842-cumde27"}{: id="20230206010843-9qz9rz1" updated="20230206010843"}