深层次理解GET和POST请求

GET和POST请求的区别

首先我们需要了解GET和POST是什么?

GET和POST是什么?
GET和POST是HTTP协议中的两种发送请求的方法。

HTTP是什么?
HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP协议中与服务器交互的方式一共有四种:PUT、DELETE、POST、GET,分别对应了对服务器资源的增删改查。其中GET是获取数据,POST是修改数据。

那么GET和POST请求的区别都有哪些?

关于GET和POST请求的区别,最直观的区别就在于GET的参数包含在URL中,而POST则是通过request body传递参数。

但凡接触过web开发都知道这个最直观的区别,但是它们最深层次的区别是什么呢?

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

举个例子:我们将TCP比作货车,负责运输数据,但是如果大街上全是一模一样的货车,那么就会一片混乱,货车与货车分不清轻重缓急。
HTTP正是为了避免这种现象发生而诞生出的交通规则。HTTP为货车贴上标签,即为它们的服务类别:GET、POST、PUT、DELETE等。

传送数据的方式:
贴着GET标签的货车需要将传送的数据放在车顶上(url),POST标签的货车需要把传送的数据放在车厢里。
这就是我们看到的GET的参数包含在URL中,而POST通过request body传递参数。
当然,在贴上GET标签的车厢内也可以传送数据,POST标签的货车也可以将数据放在车顶上,但是并不推荐。
故而,HTTP只是行为准则,而TCP才是GET和POST怎么实现的基本。

安全性:
既然我们说到GET货车会将数据放在车顶上,那么就相当于数据暴露。GET方式传递的参数可以在页面url中看到,而且GET请求参数会被完整地保留在浏览器历史记录中;而POST参数不会保留。所以不能用GET请求来传递敏感信息。

对参数大小的限制:
货车的运输自然是有目的地的,不同的浏览器(发送http请求)和服务器(接收http请求)就是不同的运输公司,公司为了降低装货卸货成本,会限制单次运输量。通常浏览器都会限制url长度在2k个字节,而大多数服务器最多处理64k大小的url。
HTTP不会对参数大小做限制,GET请求的限制是特定的浏览器或服务器对它的限制,不同的浏览器限制是不同的。POST请求按理来说是没有限制的,但是服务器的处理程序的能力会造成限制。
如果使用GET服务时,在request body中携带了数据,有的浏览器可以读出数据,而有些浏览器可能会直接忽略。所以GET请求可以使用request body,但不一定能被接收到。

数据包:
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET请求,浏览器会把http header和data一并发送出去,服务器响应200 对于POST请求,浏览器会先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok

简单来说,GET请求只需要跑一趟就可以送完货,POST请求会先去和服务器打声招呼,“嗨我马上要送一批货物来”,服务器回应“收到,发来吧”,然后POST再将货物送来。
还要注意一点,不是所有的浏览器都会在POST中发送两次包,Firefox就只发送一次

可能有些人就觉得GET只需要一步,POST需要两步,那就全部使用GET好了。
且慢!GET和POST是不能乱用的!
在网络良好的情况下,发一次包和两次包的差别可以无视,但是网络环境差的情况下,发送两次数据包的TCP在验证数据包的完整性上有很大的优点。

接下来放干货:

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark(对文件或互联网网页地址的登记,有助于迅速查找),而POST不可以。

GET请求会被浏览器主动cache(缓存),而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST没有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

GET和POST请求的应用场合?
进行查询操作时,建议使用GET请求,而关于添加和修改,建议使用POST请求。
关于一些比较敏感的信息,建议使用POST请求。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值