美文网首页
POST提交数据的四种方式

POST提交数据的四种方式

作者: 猫清扬 | 来源:发表于2019-11-17 00:07 被阅读0次

    在看这篇文章之前请先了解一下HTTP的消息结构关于HTTP协议的消息结构

    HTTP/1.1规定HTTP请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。我们一般用POST来提交数据,POST提交数据一般有四种方式。

    application/x-www-form-urlencoded 方式

    这是POST方法提交数据最常用的方式,浏览器的原生<form>表单如果不设置enctype属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。这种方式的消息结构大致是这样的:

    POST /login HTTP/1.1
    Content-Type: application/x-www-form-urlencoded;charset=utf-8 //请求头中设置该属性
    
    username=xxx&password=xxx     //请求体
    

    大部分服务器端框架支持这种结构取值,我们用jquery的ajax默认也是用这种方式提交数据。

    multipart/form-data 方式

    这也是post提交数据的常用方式,这种方式主要用来提交文件。我们使用浏览器原生表单上传文件时,必须在<form>表单上加上 enctype="multipart/form-data"。
    看一个例子:

    POST /upload HTTP/1.1
    Host: mapi.meishichina.com
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
    Cache-Control: no-cache
    Postman-Token: 89a49cdc-1d28-d8c8-eada-ab9b4868d94a
    
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="name"
    
    zhangsan
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="filename"; filename="idcard.jpg"
    Content-Type: image/png
    
    
    ------WebKitFormBoundary7MA4YWxkTrZu0gW--
    
    

    这个例子中提交了一个name=zhangsan的属性和filename=idcard.jpg的文件。他们被boundary分割,然后 Content-Type 里指明了数据是以 multipart/form-data 来编码,请求的boundary是什么。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。这也是大部分服务器端框架接收文件的取值定义。

    application/json 方式

    这是目前比较流行的传值方式,用来告诉服务端消息主体是序列化后的 JSON 字符串。大致是这样的:

    POST /login HTTP/1.1
    Content-Type: application/json;charset=utf-8 
    
    {"username":"xxx","password":"xxx"}  
    

    这种方式不同于application/x-www-form-urlencoded的,请求体是json格式。可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。

    text/xml 方式

    这是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:

    POST /handle HTTP/1.1
    Content-Type: text/xml
    
    <?xml version="1.0"?>
    <method>
        <methodName>login</methodName>
        <params>
            <param>
              <username>xxx</username>
              <password>xxx</password>
            </param>
        </params>
    </method>
    

    这种方式定义的数据结构非常的规范和明确,很适合rpc服务。像目前的微信支付的api就是这种方式。

    相关文章

      网友评论

          本文标题:POST提交数据的四种方式

          本文链接:https://www.haomeiwen.com/subject/bwiuictx.html