• GET和POST有什么区别?


    系列文章目录

    Fiddler抓包:下载、安装及使用_crazy_xieyi的博客-CSDN博客

    HTTP协议格式、URL格式及URL encode_crazy_xieyi的博客-CSDN博客


    文章目录

    9b3da124a4254011bcb1eeed1be6eabf.png

     

    • 前言
    • 一、GET方法
    •      1.在哪些情况下会构造出 HTTP GET 请求呢?
    •      2.GET请求的特点
    •      3.URL的长度有限制?这种说法是错的
    • 二、POST方法
    •      1.在哪些情况下会构造出 HTTP POST 请求呢?
    •      2.POST请求的特点
    •      3.body的长度,由请求头中的 Content-Length 字段来表示;body格式由Content-Type字段来表示
    • 三、GET和POST有什么区别?
    • 四、打假一些关于GET和POST区别的说法!
    •       1.POST比GET更安全     错!
    •       2.GET传输的数据量小,POST传输的数据量大     错!
    •       3.GET只能传输文本数据,POST可以传输二进制数据     错!
    • 五、HTTP都有哪些常见的方法?以及哪些地方可以带上自定义数据?

    前言

    在谈到GET和POST之间有什么区别的时候,我们首先应该具体了解一下GET和POST两种方法各自有什么特点。前面两部分先分别谈谈GET和POST方法,最后我们在总结这两种方法的区别。


    一、GET方法

    06f0443e5e2e459785fc9d20aeba0054.png

     

    GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源。
     

    1. 我们先谈谈在哪些情况下会构造出 HTTP GET 请求呢?

    1.直接在浏览器中输入URL

    2.HTML中的link,img,a,script等标签也能够触发HTTP GET请求

    3.form表单

    4.ajax

    5.通过第三方工具,如postman这类工具

    6.通过linux下的 wget/curl

    7. ......

    2. GET请求的特点:

    1. 首行的第一部分为GET

    2.URL的query string(查询字符串) 可以为空,也可以不为空。

    3.header 部分有若干个键值对结构

    4.body部分为空(绝大部分),其实也可以不为空。其实通过抓包,会发现其他网站的body基本都为空。

     

    3. URL的长度有限制?这种说法是错的。

    可以看到网上有很多帖子都说URL的长度存在上限,这种讲法是错的,在RFC 2616标准中并没有限制URL的长度。只是提到了服务器应该谨慎 URI 长度超过 255 字节,因为一些较旧的
    客户端或代理实现可能无法正确支持这些长度。RFC 2616标准文档:RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1https://www.rfc-editor.org/rfc/rfc2616

    95393fce433f474eb2ac4d37f27f6a26.png

     

    二、POST方法

    270ec67accc04fd28259eaf7f17521ec.png

     1. 哪些情况下会构造出 HTTP POST 请求呢?

    1.form表单

    2.ajax

    3.通过第三方工具

    4. ......

    2. POST请求的特点:

    1.首行的第一部分为POST

    2.URL的query string 一般为空,但是也完全可以加上。(习惯用法)

    3.header 部分有若干个键值对结构

    4.body部分为空(绝大部分),其实也可以不为空。

    3. body的长度,由请求头中的 Content-Length 字段来表示;body格式由Content-Type字段来表示

    POST请求的body 里面的数据格式,可以支持很多格式。格式的类型由请求头中的Content-Type字段来表示。body的长度,由请求头中的 Content-Length 字段来表示。

    8b159d0e1bdc4d6d863b771eebd56c41.png

     三、GET和POST有什么区别?

    GET和POST(以及HTTP协议的其他方法之间)之间没有本质区别!!!

    但是细节上有细微区别:

    1.数据位置:GET习惯把自定义数据放到 query string 中,POST习惯把自定义数据放到 body中

    2.语义区别:GET一般用于获取数据,POST一般用于提交数据

    3.幂等性:GET请求一般会设计成“幂等”的,POST请求一般不要求设计成幂等的

    所谓的幂等,其实是数学上的一种术语,某个请求执行一次和执行多次没有什么区别,如果能做到这一点就称为幂等。比如说转账操作,同一次转账,不管提交几次,始终只会成功一次。因为同一次转账就会被分配一个身份标识,如果服务器对同一次转账收到多次请求,那么就会自动进行去重。因为GET方法一般习惯于是获取数据,所以一般会设计成幂等的

    4.可缓存:GET请求一般会被缓存;POST请求一般不能缓存

    所谓缓存,也是计算机圈子里面的一个术语,比如,在一般情况下进行一些复杂的计算,得到一些结果。如果这个结果的结算过程代价太大,就可以把这样的结果保存下来,下次直接使用,这样就避免重复计算了。   但是这种也不是绝对的,比如说像搜索广告这种业务场景,虽然也是GET请求,但是计算结果绝对不能缓存,因为搜索广告这种业务是要实时计算的。      

    四、打假一些关于GET和POST区别的说法!

          1.POST比GET更安全     错!

    这样的说法是不科学的. 是否安全取决于前端在传输密码等敏感信息时是否进行加密, 和 GET POST 无关。无论GET是把数据放到query string 还是POST把数据放到body,其实都是不安全。

          2.GET传输的数据量小,POST传输的数据量大     错!

    这个也是不科学的, 标准没有规定 GET 的 URL 的长度, 也没有规定 POST 的 body 的长度. 传输数据量多少, 完全取决于不同浏览器和不同服务器之间的实现区别。

          3.GET只能传输文本数据,POST可以传输二进制数据     错!

     这个也是不科学的. GET 的 query string 虽然无法直接传输二进制数据, 但是可以针对二进制数据进行 url encode。

     

    五、HTTP都有哪些常见的方法?以及哪些地方可以带上自定义数据?

     
    常见的方法
    PUT 与 POST 相似,只是具有幂等特性,一般用于更新
    DELETE 删除服务器指定资源
    OPTIONS 返回服务器所支持的请求方法
    HEAD 类似于GET,只不过响应体不返回,只返回响应头
    TRACE 回显服务器端收到的请求,测试的时候会用到这个
    CONNECT 预留,暂无使用
     
    可以带上自定义数据的地方:
    a) URL path
    b)   URL query string
    c)   header(可以添加自定义的键值对)
    d)   body

     


     

     

  • 相关阅读:
    深入浅出PyTorch——模型定义
    解决selenium加载网页过慢影响程序运行时间的问题
    win10使用WSL(Windows Subsystem for Linux)安装Ubuntu
    uniapp入门:常用事件绑定与数据同步
    【linux网络编程】Unix/Linux上的五种IO模型
    直接root Android设备,会「隐身」的恶意软件AbstractEmu正在偷偷作恶
    Composer更新所有依赖包
    服务器数据恢复-服务器系统损坏启动蓝屏的数据恢复案例
    网络知识学习(笔记二)
    【消息队列:优势、劣势与应用】
  • 原文地址:https://blog.csdn.net/crazy_xieyi/article/details/126732473