区别:

还有就是请求包的个数:get 是1个 httpheader+data ,post是两个,先http header,再data


在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包。

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

  1. GET与POST都有自己的语义,不能随便混用。

  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

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

参考自:https://www.w3school.com.cn/tags/html_ref_httpmethods.asp

https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd

http 里面的post和get区别相关推荐

  1. C++的类和C里面的struct有什么区别

    关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化 如果没有定义构造函数,struct可以用大括号初始化. 如果没有定义构造函数,且所有成员变量全是publi ...

  2. java的BigInteger里面的mod和remainder区别

    转载请注明出处,谢谢! 下面直接上图吧,稍后解释关于mod和remainder以及负数求余求模的区别. mod是模运算,remainder是求余运算,如果被除数是正整数,mod和remainder的结 ...

  3. html 中 标签里面的id 和 name 有什么区别?

    html 中 标签里面的id 和 name 有什么区别? id与name的作用,作为标签的标识符,基本上是一样的.name是老方法,id是在name基础上发明的,后来才有的. 一般来说,js中使用ID ...

  4. oracle里面的long,long raw,raw,clob,blob区别

    ORACLE LOB类型提供了BFILE.BLOB.CLOB.NCLOB让我们来存储最大尺寸有4G的无结构的数据块(例如:文本.图像.声音和视频等).并且它们右以以高效的.任意的和分段操作的方式存取数 ...

  5. Android stdio build.gradle buildscript 里面的repositories 和allprojects里面 repositories 的区别

    第一段 buildscript 里面的 repositories 表示只有编译工具才会用这个仓库. 比如 buildscript 里面的 dependencies classpath 'com.and ...

  6. vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别(上)

    http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361558.html 一:先来看看  新建网站  里面的  ASP.NET 网站的建立过程 ...

  7. vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)

    地址:http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361686.html 二:下面是 通过 新建项目 来创建 ASP.NET web 应 ...

  8. JAVA里面的int类型 和Integer类型,有什么不一样

    JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...

  9. unity5.4.3p2里面的AssetBundle打包流程

    unity5.4.3p2里面的AssetBundle打包流程,相比之前unity4.x的打包简单了许多,Unity4.X中打包的时候需要自己去管理依赖关系,各种BuildPipeline.PushAs ...

最新文章

  1. 使用卷积神经网络进行文本分类textCNN
  2. IT生存环境压力让人抑郁 .
  3. spring第一个小例子(Spring_xjs1)
  4. Linux段式管理与页式管理
  5. DTC 2019 数据技术嘉年华·金融峰会(深圳站)来袭
  6. 【Python3网络爬虫开发实战】1.6.2-Tornado的安装
  7. 日赚10.07亿?字节跳动去年收入约580亿美元 同比增长70%
  8. .Net Core 学习笔记1——包、元包、框架
  9. Object型转list,jsonObject型转list方法,亲测可用
  10. Debian9安装QT5.12.3
  11. 统计学的Python实现-019:任意正态分布计算概率
  12. 盗取手机验证码诈骗的克星来了:号码认证服务为你保驾护航
  13. 腾讯云神笔低代码平台的申请没通过,只能等公测了
  14. 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件
  15. Master HA彻底解密
  16. MeterSphere一站式开源持续测试平台
  17. C语言指针详解——入门C语言指针,初级指针使用。
  18. 自动控制原理之自动控制的基本概念
  19. 作为程序员的我,常用的工具软件有这些
  20. gt710显卡驱动linux,华硕 GT710-SL-2G驱动下载_asus GT710-SL-2G显卡驱动下载-硬件之家...

热门文章

  1. 链表问题11——两个单链表相交的系列问题(四):总结
  2. 第一次写KMP的体会
  3. Elasticsearch创建雇员目录
  4. HBase安装配置以及Java操作hbase
  5. Java学习提升体系结构
  6. SpringMVC,针对不支持PUT、DELETE提交的游览器处理方式
  7. 前端魔法堂——异常不仅仅是try/catch
  8. Nginx搭建静态网站
  9. ActiveMQ持久化消息的三种方式
  10. App Store 申请审核加速