Skip to content

Instantly share code, notes, and snippets.

@zhanzhenchao
Last active September 29, 2022 08:25
Show Gist options
  • Save zhanzhenchao/29ab7b5d4b3c9b9a9358 to your computer and use it in GitHub Desktop.
Save zhanzhenchao/29ab7b5d4b3c9b9a9358 to your computer and use it in GitHub Desktop.
Http 协议

四种常见的POST提交方式

前言: HTTP协议是以ASCII码进行传输,一个HTTP请求分为以下三个部分:

<method>  <request-URL>  <version>

<headers>

<body>

POST提交的数据规定必须放在中,但是没有规定具体使用什么编码方式。因此,随着web的发展越来越快,服务器解析部分一般采用以下4种方便快捷的方式,也就决定了HTTP POST提交的4中方式。


application/x-www-form-urlencoded

浏览器原生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提交,默认也是这个类型方式。


multipart/form-data

浏览器原生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--


application/json

现阶段普遍流行的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

text/xml

比较臃肿的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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment