前言: HTTP协议是以ASCII码进行传输,一个HTTP请求分为以下三个部分:
<method> <request-URL> <version>
<headers>
<body>
POST提交的数据规定必须放在中,但是没有规定具体使用什么编码方式。因此,随着web的发展越来越快,服务器解析部分一般采用以下4种方便快捷的方式,也就决定了HTTP POST提交的4中方式。
浏览器原生form表单提交方式,如果不设置的enctype属性,默认值为application/x-www-form-urlencoded。
> POST 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
JQ使用AJAX进行POST提交,默认也是这个类型方式。
浏览器原生form表单提交方式,一般用于上传文件。采用boundary标示信息的开始和结束。
> POST http://www.example.com HTTP/1.1
> Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
> ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
现阶段普遍流行的POST方式,专门用于键值对复杂的数据结构。Google的AngularJS默认POST提交方式就是这种。
> POST 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
比较臃肿的POST提交方式。可以用于制定远程调用规范(Web service),例如XML-RPC请求:
> POST http://www.example.com HTTP/1.1
> Content-Type: text/xml
> <?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>