协议规定,POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
但是,数据发送出去,还要服务端成功解析才有意义。一般服务端语言如php、python、Java、.NET等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。也就是说,Content-Type 指定了消息主体中的编码方式 。因此,POST提交数据方案,直接跟 Content-Type 和消息主体两部分有关。
application/x-www-form-urlencoded
这是最常见的 POST 提交数据的方式。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据( enctype 的 POST 默认方式)