美文网首页
POST和GET请求方式的区别

POST和GET请求方式的区别

作者: IF_123 | 来源:发表于2019-03-05 22:10 被阅读0次

    POST和GET的区别

    1.传送方式:get通过地址栏传输,post通过报文传输。
    2.传送长度:get参数有长度限制(受限于url长度),而post无限制。
    3.GET产生一个TCP数据包;POST产生两个TCP数据包。
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
    4.GET在浏览器回退时是无害的,而POST会再次提交请求。
    5.GET产生的URL地址可以被Bookmark,而POST不可以。
    6.GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    7.GET请求只能进行url编码,而POST支持多种编码方式。
    8.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    9.GET请求在URL中传送的参数是有长度限制的,而POST么有。
    10.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
    11.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    12.GET参数通过URL传递,POST放在Request body中。
    13.Get向服务器请求数据。依照HTTP协议,get 是用来请求数据。
    Post向服务器发数据。依照HTTP协议,Post的语义是向服务器添加数据,也就是说按照Post的语义,该操作是会修改服务器上的数据的。

    post数据提交时四种常见的body数据的格式

    当向服务器端发送一个post请求的时候,需要把数据传输的格式告诉服务器。服务器会根据格式进行相应的数据解析。
    通过在请求头中指定content-type来设置传输的格式
    1.application/x-www-form-urlencoded
    这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

    <form action="form_action.asp" enctype="text/plain">
      <p>First name: <input type="text" name="fname" /></p>
      <p>Last name: <input type="text" name="lname" /></p>
      <input type="submit" value="Submit" />
    </form>
    首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
    大部分服务端语言都对这种方式有很好的支持。例如 PHP 中,$_POST['title'] 可以获取到 title 的值,$_POST['sub'] 可以得到 sub 数组。
    

    2.multipart/form-data
    这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的enctype 等于 multipart/form-data。直接来看一个请求示例:

    BASHPOST 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--
    这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。
    

    3.application/json
    application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

    BASHPOST http://www.example.com HTTP/1.1 
    Content-Type: application/json;charset=utf-8
    {"title":"test","sub":[1,2,3]}
    

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

    HTMLPOST 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>
    

    相关文章

      网友评论

          本文标题:POST和GET请求方式的区别

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