首页 > 其他分享 >关于post、get、put、delete的区别

关于post、get、put、delete的区别

时间:2024-04-16 17:44:17浏览次数:22  
标签:浏览器 请求 get url put post

post和put的区别

put和post操作都是向服务器端发送数据,但是put是幂等的,而post是非幂等的。所谓幂等,即多次发送同一个请求时候,产生的结果是一样的就是幂等性原则,这是为了当网络出现延迟等,服务器(客户端)之间发送请求没有收到回应,再重新发一次,实际上另一端已经接收到了第一次的请求,接着有接收第二次同一请求。如果是交易的业务没有幂等就会造成交易两次却只结算一次交易额。
put请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(put用于向服务器上传或更新资源)。
Post请求:后一个请求不会把第一个请求覆盖掉。(post用于提交表单或创建新资源)。

get和post

这里差别比较多
1.关于安全性:post的安全性要相对比get的高,因为get的参数都是放在url中的,可以被缓存,截取直接就能获取数据,所以一般登录密码这些信息不会明文放在url中使用get请求发送。而post的数据都是放在RequestBody,可以进行一次加密,相对安全些。使用get请求的,直接将地址复制粘贴就可以原样访问,而post一般不行,我们在浏览器输入一个网址访问网站都是get请求。

2.请求数据上限:get请求的数据会放在url后面,使用 ?A=B 格式(A是名称,B是参数)发送,这个url一般是有长度限制的,http协议没有对url长度进行限制,这个限定主要是浏览器和服务器的限制,一般是1024字节长度。而post可以将数据放在RequesetBody中传送,这里就没有数据量的上限了,get是无请求体的,所以RequestBody只能使用post方式提交。

3.关于tcp数据包:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。实际上get会产生一个tcp数据包,post会产生两个数据,这就会造成响应时间问题,但并不是所有的浏览器都是post发两次包,firefox不是。

参考资料:https://blog.csdn.net/weixin_56921066/article/details/118608143

标签:浏览器,请求,get,url,put,post
From: https://www.cnblogs.com/twinkler/p/18138198

相关文章

  • LayUI弹窗确定后获取子页面的值(如获取UEditor富文本的内容,或input标签内容)
    LayUI弹窗确定后获取子页面的值(如获取UEditor富文本的内容,或input标签内容)子窗体JS代码<scriptsrc="~/lib/ueditor-1.4.3.3/ueditor.config.js"></script><scriptsrc="~/lib/ueditor-1.4.3.3/ueditor.all.js"></script><script>varue=UE.......
  • MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案
    问题背景在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:RuntimeError:UnsupporteddevicetargetGPU.Thisprocessonlysupportsoneofthe['CPU'].PleasecheckwhethertheGPUenvironmentisinstalledandconfiguredcorrectly,andcheckwhethercu......
  • postgres docker安装
    docker-compose文件version:'3.1'services:db:image:postgres:15container_name:odoo16_dbrestart:always#总是重新启动容器environment:-POSTGRES_DB=postgres#设置数据库名称为postgres-POSTGRES_PASSWORD=odoo#设置数......
  • TVM中的Compute操作
    定义TVM从Halide继承了计算与调度分离的思想,并在其内部重用了部分Halide的调度原语,也引入了一些新的调度原语,用于优化GPU和专用加速器性能。先举个例子吧:importtvmfromtvmimportten=1024dtype="float32"A=te.placeholder((n,n),dtype=dtype,name='A')K=te......
  • Ubuntu下离线安装PostgreSQL
      首先,我的环境是Ubuntu20.04  如果是在线安装,根据官网的介绍很简单#安装包sudoaptupdatesudoaptinstallwgetgnupg#导入仓库sudosh-c'echo"debhttps://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/......
  • kettle从入门到精通 第五十二课 ETL之kettle Avro output
    1、上一节课我们学习了avroinput,本节课我们一起学习下avroout步骤。本节课通过jsoninput加载json文件,通过avroout生成avro二进制文件,写日志步骤打印日志。将jsoninput、avrooutput、写日志三个步骤拖到画布,然后连线,如下图所示:jsoninput步骤不在过多讲解,不了解的可以学......
  • gets 不安全,请使用 fgets
    结论:为了安全考虑,用fgets(b,sizeof(b),stdin)替代gets(b)下面是gets.c的代码#include<stdio.h>intmain(){charb[40];gets(b);printf("%s",b);return0;}使用gcc10.2.1进行编译(gccgets.c-ogets)会提示warning:implicitdeclarationof......
  • SpringBoot项目中对定义的多个BeanPostProcessor排序
    前言BeanPostProcessor是Spring提供的一种扩展机制,可以让我们在bean初始化前后做一些额外的操作,Spring中的@Async,@Scheduled,@RabbitHandler等注解的底层实现都是BeanPostProcessor在起作用,如RabbitListenerAnnotationBeanPostProcessor。代码示例@Configurationpub......
  • docker拉取失败 Error response from daemon: Get "https://registry-1.docker.io/v2/
     解决方法:配置DNS地址用xftp打开/etc/resolv.conf更改dns地址nameserver8.8.8.8nameserver8.8.4.4保存,在xshell中重启docker  ---  sudosystemctlrestartdocker重新拉取nginx--dockerpullnginx拉取成功!!! ......
  • Fedora 39 修复 libreoffice 启动时报错 undefined symbol: hb_graphite2_face_get_gr
    .....之前Libreoffice是好的,今天打开Excel文档的时候启动画面一闪而过,然后就没有然后了。于是我尝试使用命令来启动,发现报错:>$libreoffice/usr/lib64/libreoffice/program/soffice.bin:symbollookuperror:/usr/lib64/libreoffice/program/libvcllo.so:undefin......