首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你真的完全了解了post和get的区别和联系吗?

一、联系

get和post是HTTP协议中的两种发送请求的方法,底层都是用TCP/IP协议进行通信的。

客户端ip发出请求,发出的请求数据包会通过tcp协议,经网络传输给远程服务端ip,服务端ip收到请求包之后,解析并处理请求包最后服务端会通过tcp协议将处理结果返回给客户端ip,用户便可以查看到想要的响应数据。

get和post本质上都是TCP链接, 之所以有get和post区分,是因为他们底层数据的传输都是基于tcp协议,需要通过HTTP的规则和浏览器/服务器的限制进行区分,使他们在应用过程中体现出不同。

HTTP给网络运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给请求包贴上GET的标签(设置method为GET),而且要求把传送的数据放在url中以方便记录。如果是POST请求,在请求数据包贴上POST的标签。

 二、区别

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

最重点的区别是:GET产生一个TCP数据包,POST产生两个TCP数据包。也就是说,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器第一次先将header发送过去,服务器若响应100 continue,确认服务器和网络没问题可以服务,才会再将真正的data数据提交,服务器响应200 ok。

看到这,你可能会认为POST消耗时间更多,因此GET比POST更有效,准备用GET替换POST来优化网站。但这是个大坑!为什么呢?

首先,get在url中传输参数有长度限制,post没有限制;这是因为浏览器和服务器对过大的url请求数据量处理起来成本过高,故对单次访问都做了限制,一旦超出限制就不会处理后续请求,这就会导致即使GET带request body,其参数也不一定能被接收到,会返回null错误,所以对于长而多的请求参数直接用post即可;

其次,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以忽略,在网络环境差的情况下,两次包的TCP在验证数据包完整性上更有优势;反观get将参数直接暴露在URL上,非常不安全,因此不能用它来传递敏感信息。

最后,并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

三、实际使用时

get:只为获取数据,同时加上请求参数的url不会特别大,且没有需要保密的字段,则用get请求;

post:为了提交数据,比如提交一些数据给后台保存、删除等,无论是否有一定数据量均可使用post;另外,使用post提交请求来get数据也是可以的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210309A073CU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券