http 里面的post和get区别
区别:
还有就是请求包的个数: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来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
GET与POST都有自己的语义,不能随便混用。
据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是所有浏览器都会在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区别相关推荐
- C++的类和C里面的struct有什么区别
关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化 如果没有定义构造函数,struct可以用大括号初始化. 如果没有定义构造函数,且所有成员变量全是publi ...
- java的BigInteger里面的mod和remainder区别
转载请注明出处,谢谢! 下面直接上图吧,稍后解释关于mod和remainder以及负数求余求模的区别. mod是模运算,remainder是求余运算,如果被除数是正整数,mod和remainder的结 ...
- html 中 标签里面的id 和 name 有什么区别?
html 中 标签里面的id 和 name 有什么区别? id与name的作用,作为标签的标识符,基本上是一样的.name是老方法,id是在name基础上发明的,后来才有的. 一般来说,js中使用ID ...
- oracle里面的long,long raw,raw,clob,blob区别
ORACLE LOB类型提供了BFILE.BLOB.CLOB.NCLOB让我们来存储最大尺寸有4G的无结构的数据块(例如:文本.图像.声音和视频等).并且它们右以以高效的.任意的和分段操作的方式存取数 ...
- Android stdio build.gradle buildscript 里面的repositories 和allprojects里面 repositories 的区别
第一段 buildscript 里面的 repositories 表示只有编译工具才会用这个仓库. 比如 buildscript 里面的 dependencies classpath 'com.and ...
- vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别(上)
http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361558.html 一:先来看看 新建网站 里面的 ASP.NET 网站的建立过程 ...
- vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
地址:http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361686.html 二:下面是 通过 新建项目 来创建 ASP.NET web 应 ...
- JAVA里面的int类型 和Integer类型,有什么不一样
JAVA里面的int类型 和Integer类型,有什么不一样 原创 2013年09月04日 23:15:11 标签: java / 2120 编辑 删除 JAVA里面的int类型 和Integer类型 ...
- unity5.4.3p2里面的AssetBundle打包流程
unity5.4.3p2里面的AssetBundle打包流程,相比之前unity4.x的打包简单了许多,Unity4.X中打包的时候需要自己去管理依赖关系,各种BuildPipeline.PushAs ...
最新文章
- 使用卷积神经网络进行文本分类textCNN
- IT生存环境压力让人抑郁 .
- spring第一个小例子(Spring_xjs1)
- Linux段式管理与页式管理
- DTC 2019 数据技术嘉年华·金融峰会(深圳站)来袭
- 【Python3网络爬虫开发实战】1.6.2-Tornado的安装
- 日赚10.07亿?字节跳动去年收入约580亿美元 同比增长70%
- .Net Core 学习笔记1——包、元包、框架
- Object型转list,jsonObject型转list方法,亲测可用
- Debian9安装QT5.12.3
- 统计学的Python实现-019:任意正态分布计算概率
- 盗取手机验证码诈骗的克星来了:号码认证服务为你保驾护航
- 腾讯云神笔低代码平台的申请没通过,只能等公测了
- 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件
- Master HA彻底解密
- MeterSphere一站式开源持续测试平台
- C语言指针详解——入门C语言指针,初级指针使用。
- 自动控制原理之自动控制的基本概念
- 作为程序员的我,常用的工具软件有这些
- gt710显卡驱动linux,华硕 GT710-SL-2G驱动下载_asus GT710-SL-2G显卡驱动下载-硬件之家...