get和post的区别,二者是幂等的吗?

一、什么是幂等

所谓幂等性通俗的将就是一次请求和多次请求同一个资源产生相同的副作用。

维基百科定义:幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,"setTrue()"函数就是一个幂等函数,无论多次执行,其结果都是一样的,更复杂的操作幂等保证是利用唯一交易号(流水号)实现.

  • GET:只是获取资源,对资源本身没有任何副作用,天然的幂等性。
  • HEAD:本质上和GET一样,获取头信息,主要是探活的作用,具有幂等性。
  • OPTIONS:获取当前URL所支持的方法,因此也是具有幂等性的。
  • DELETE:用于删除资源,有副作用,但是它应该满足幂等性,比如根据id删除某一个资源,调用方可以调用N次而不用担心引起的错误(根据业务需求而变)。
  • PUT:用于更新资源,有副作用,但是它应该满足幂等性,比如根据id更新数据,调用多次和N次的作用是相同的(根据业务需求而变)。
  • POST:用于添加资源,多次提交很可能产生副作用,比如订单提交,多次提交很可能产生多笔订单。

二、get和post的区别

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

实际上也会有:

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

但本质上二者并没有区别,本质上就是TCP链接,并无差别。

还有一个重大区别:GET产生一个TCP数据包;POST产生两个TCP数据包。(并非所有浏览器)

三、回答上述问题

GET和POST是两种常见的HTTP请求方式,它们在多个方面存在差异:请求方式、数据大小、缓存和历史记录以及幂等性。

GET请求是从服务器获取数据,数据被包含在URL中,大小受限于URL长度,通常不超过2KB,容易被缓存且数据会保存在浏览器历史记录中,并且是幂等 的,多次执行结果相同;而POST请求是向服务器发送数据,数据包含在请求体中,大小没有限制,不会被缓存且数据不会保存在浏览器历史中,通常不是幂等的,多次执行可能产生副作用。

所谓幂等性指的是同样的请求执行多次,产生的效果是一样的,GET请求是幂等的因为只是从服务器读取数据不会对服务器产生任何影响,而POST请求通常不是幂等的因为会修改服务器上的资源,每次执行都可能产生不同的结果。

相关推荐
sz66cm9 分钟前
Linux基础 -- 在内存中使用chroot修复eMMC
linux·服务器
Hi202402171 小时前
如何通过partclone克隆Ubuntu 22系统
运维·服务器·ubuntu
神仙别闹1 小时前
基于C#实现中央定位服务器的 P2P 网络聊天系统
服务器·网络·c#
Li_yizYa1 小时前
网络原理 | 网络基础概念复习
运维·服务器·网络·计算机网络
s_little_monster1 小时前
【Linux】socket网络编程基础
linux·运维·网络·笔记·学习·php·学习方法
猴子请来的逗比4891 小时前
nginx负载均衡及keepalive高可用
运维·学习·nginx·负载均衡
珊珊而川8 小时前
ChatPromptTemplate创建方式比较
服务器·langchain
欧先生^_^10 小时前
Linux内核可配置的参数
linux·服务器·数据库
若风的雨10 小时前
【deekseek】P2P通信路由过程
服务器·网络协议·p2p
Python私教10 小时前
征服Rust:从零到独立开发的实战进阶
服务器·开发语言·rust