最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • GET和POST两者的区别

    正文概述 掘金(夜千灯)   2021-02-24   565

    GET 和 POST 是 HTTP 协议中的两种发送请求的基本方法,对于前端开发者而言,几乎每天都在使用它们,再熟悉不过了,一般也都能说出几点两者的区别。

    如果面试中被问到这个问题,先回答一下几点,肯定是不会有错的:

    但是!

    这就结束了吗?

    NO!NO!NO!

    GET和POST两者的区别

    想要拿到高薪,得说出一点别人不知道的东西,气场这块要拿捏地死死的。

    抛开固有印象,我们重新来审视一下 GET 和 POST,会发现它们本质上没有区别!

    我们知道 GET 和 POST 是 HTTP 协议中的两种发送请求的方法,而 HTTP 是基于 TCP/IP 的关于数据在万维网中如何通信的协议

    HTTP 的底层是 TCP/IP,所以 GET 和 POST 的底层也是 TCP/IP。也就是说, GET 和 POST 都是 TCP 连接(这应该可以算是两者的相同点)。

    换句话说,GET 和 POST 能做的事情是一样的,在技术上完全可以给 GET 请求 加上 Request body,给 POST 请求带上 URL 参数。

    但是存在也不代表着一定合理。

    在万维网世界中,TCP就像汽车,负责用来运输数据,但路上的汽车不会只有一辆的,而为了维护交通的高效运行,交通规则 HTTP 应运而生。HTTP 给汽车设定了几种服务类别,有 GET、POST、PUT、DELETE 等。HTTP 规定,当执行 GET 请求时,要给该车贴上 GET 标签,并且把要传输的数据放在车顶上(url 中)以方便记录;当执行 POST 请求时,要给该车贴上 POST 标签,并且为了安全把要传输的数据放在车厢里(Request body 中)。

    当然规定是规定,你要非要在 GET 的时候偷偷在车厢里放一点货,或者在 POST 的时候把货往车顶上放,谁也拦不住你,只是会让别人觉得你是个憨憨,不跟你玩。

    所以,HTTP 只是个行为准则,而 TCP 才是 GET 和 POST 怎么实现的基本。

    上面我们了解了 HTTP 对 GET 和 POST 参数的传输渠道(url 还是 Request body)提出了要求,但我们还知道,两种请求的还对参数大小做出了限制,这又是怎么回事呢?

    在万维网世界中,还有另一个重要角色:运输公司。不同的浏览器(发起 HTTP 请求)和服务器(接收 HTTP 请求)就是不同的运输公司。虽然理论上,可以在车顶无限堆放货物(url 中无限加参数),但是装货和卸货也是要成本的,运输公司要核算成本和控制风险,所以他们会限制单次运输量,数据量太大对浏览器和服务器都是很大的负担。

    所以,大多数浏览器会限制 url 长度最多在 2k 个字节,大多数服务器最多处理 64k 大小的 url。如果你用 GET 服务,在 Request body 中偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你读出数据,但有些服务器会直接忽略。所以还是不要这样操作了。

    现在我们知道,GET 和 POST 本质上就是 TCP 连接,并无差别,只不过由于 HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

    说道这里,GET 和 POST 要说的也就差不多了。等等,或许你注意到了,上文中我特意给第9点加粗了,也就是:GET 请求产生一个 TCP 数据包,而 POST 请求产生两个数据包。

    这是怎么回事呢?

    可以看出,POST 请求需要两步,而 GET 请求仅需一步,很明显 GET 的用时更短,效率更高。但如果你想用 GET 来代替 POST 来优化网站性能的话,还是需要谨慎的,以为:

    • GET 和 POST 都有自己的语义,不能随便混用;
    • 在网络环境好的情况下,GET 和 POST 所需的时间差别基本可以无视,但是在网络环境差的情况下,两次包的 TCP 在验证数据包完整性上,有非常大的优点;
    • 并不是所有的浏览器都会在 POST 中发送两次包,如 Firefox 就只发送一次。

    以上就是我总结的关于 GET 和 POST 的关系,望诸君雅正。


    起源地下载网 » GET和POST两者的区别

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元