我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。
下面先来说一下具体的这四种提交方式都有:application/x-www-form-urlencoded、multipart/form-data、application/json和text/xml。
application/x-www-form-urlencoded这种方式应该是最常见的POST提交数据的方式了,在正常的form表单中如果不设置enctype,默认的提交方式就是application/x-www-form-urlencoded,请求的方式类似于
代码语言:javascript代码运行次数:0运行复制BASHPOST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
multipart/form-data这也是一个常见的post数据提交方式,当form表单中包含文件时,就必须采用这种提交方式来将文件提交到服务器上。