当前位置: 首页 > news >正文

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请求通常不是幂等的因为会修改服务器上的资源,每次执行都可能产生不同的结果。

http://www.lryc.cn/news/351920.html

相关文章:

  • 农场--Kruskal应用--c++
  • 【Crypto】Rabbit
  • IRFB3207PBF TO-220 N沟道75V/180A 直插MOSFET场效应管
  • 基于单张图片快速生成Metahuman数字人(模型贴图绑定)的工作流演示
  • MySQL数据库下的Explain命令深度解析
  • 防火墙技术基础篇:基于IP地址的转发策略
  • OpenFeign快速入门 替代RestTemplate
  • 自动化测试--利用pytest实现整条业务链路测试
  • 学习其他推理判断
  • Centos7环境下MySQL5.7.38 安装开源审计插件 mysql-audit
  • 基于深度学习的表情识别系统
  • Debug-010-git stash的用法及使用场景
  • RustGUI学习(iced/iced_aw)之扩展小部件(二十五):如何使用tab部件来创建tab多页面切换?
  • P2P服务端模型配合 Tool.net P2pServerAsync 类使用
  • Python语法学习之 - 生成器表达式(Generator Expression)
  • docker所在磁盘空间不足 迁移数据
  • 15、24年--信息系统管理——管理要点
  • 如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?
  • 安卓分身大师4.6.0解锁会员安卓14可用机型伪装双开多开
  • 攻防世界-mobile-easy-app详解
  • 【简单介绍下爬山算法】
  • Android App启动流程和源码详解
  • SQL的多表联查
  • 瑞芯微RV1126——人脸识别源码分析
  • springboot 两个相同类型的Bean使用@Resouce加载
  • 代码随想录算法跟练 | Day3 | 链表Part1
  • 虚拟化技术[1]之服务器虚拟化
  • WPF之容器标签之Canvas布局标签
  • AIGC绘画设计基础-建筑设计应用
  • Pinia:状态管理库