HttpGET和POST的详细区别
我们先试着从底层原理开始说起,往上一步一步理解:
GET和POST是什么?他们是HTTP协议中发送请求的两种方法
HTTP是什么?它是基于TCP/IP的关于数据在万维网中如何通信的协议。HTTP的底层是TCP/IP。所以GET,POST的底层都是TCP链接,也就是说他们的底层是没有任何区别的。
然后我们来解释一下GET和POST的工作原理:
在万维网世界中,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本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
GET与POST都有自己的语义,不能随便混用。
据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
总结一下:
GET
- GET请求参数包含在URL中传递,会被浏览器记录下来,安全性较低,用于传递非敏感字段。
- GET请求传参有大小限制,一般来说1024字节,每个浏览器对此限制不一样。所以GET一般用于请求数据。
- 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
POST
- POST请求,参数包含在RequestBody中传递。
- 浏览器先向服务器发送请求,服务器同意接受返回100 continue,然后浏览器再次发送包含请求参数的数据,对于验证数据的完整性有很大意义。GET产生一个TCP数据包;POST产生两个TCP数据包。
- POST请求理论上没有参数大小的限制,实际上post所能传递的数据量根据取决于服务器的设置和内存大小。而且参数包含在Request Body中用户不可见,安全性较高。
- 所以POST一般用于向服务器提交数据。
例子参考自:https://blog.csdn.net/chen_changying/article/details/80117702
HttpGET和POST的详细区别相关推荐
- 【视频】详解Scala中的类及与Java的详细区别
详解Scala中的类及与Java的详细区别
- vuex中mutation和action的详细区别
一.vuex中mutation和action的详细区别 const store = new Vuex.Store({state: {count: 0},mutations: {increment (s ...
- 图像技术_基础技术(0001)_RGB与CMYK的定义和详细区别
图像技术_基础技术(0001)_RGB与CMYK的定义和详细区别 基础技术: 本文部分内容来自网络 两者的定义 RGB:显示颜色,通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的 ...
- 魅蓝5s的android系统版本,魅蓝5s有几个版本?魅蓝5s标准版和高配版详细区别对比评测...
魅族在北京召开魅蓝新品发布会,正式发布了全新升级版魅蓝5s新品,这款新品可以说是一款过渡产品,要说要比上一代产品升级也不是很明显,算是小幅度的提升,主要加入了快充和提升了运行内存大小.那么魅蓝5s有几 ...
- acer蜂鸟swift1深度linux,宏碁蜂鸟Swift3和Swift1哪个值得买?宏碁蜂鸟Swift1和Swift3详细区别对比评测...
蜂鸟Swift系列笔记本是宏碁旗下主打轻薄.长续航的产品.今日,宏碁官方宣布,全新蜂鸟Swift系列--Swift 3.Swift 1将于5月25日正式发售,目前已经接受预约.宏碁蜂鸟Swift3和S ...
- Java中final、finally、finalize的简单区别,中等区别,详细区别(Lawliet 修改+注释版)
简单区别: 中等区别: 虽然这三个单词在Java中都存在,但是并没有太多关联: final:java中的关键字,修饰符. 1.如果一个类被声明为final,就意味着它不能再派生出新的 ...
- 小米note2不上Android9吗,小米note2和华为g9哪个好?小米note2和华为G9青春版详细区别对比评测...
小米note2介绍: 小米note2详细参数,详情如下所示,参数党必看: 小米note2硬件配置参数 屏幕规格 5.7英寸 CPU型号 高通骁龙821 RAM内存 4GB/6GB ROM存储 64GB ...
- 荣耀平板2 android go,荣耀平板2和华为M2哪个好?华为荣耀平板2和华为M2详细区别对比评测_硬件教程...
华为近日刚刚举行了2016新品发布会,不仅发布了荣耀畅玩6X,同时也发布了荣耀手表S1和荣耀平板2,而荣耀平板2拥有8寸的屏幕是千元价格的小屏幕平板,那么荣耀平板2和华为M2哪个好?荣耀平板2和华为M ...
- PMSM矢量控制笔记(1.2)——隐机电机与凸极电机的详细区别
前言: 永磁同步电机的转子包括永磁体.转子铁芯.轴承等机械结构等,其转子可以制成实心的形式,也可以由压片压制而成,其上装有永磁体材料.根据电机转子上永磁材料安装位置的不同,可以将永磁同步电机分为表贴式 ...
最新文章
- ubuntu无法获得锁 /var/lib/dpkg -open 问题
- annotations_Spring Annotations我从来没有机会使用第2部分:@ConfigurationProperties
- CSS语法规范(CSS、HTML)
- python自学行吗-《》 python自学行吗?
- 反转链表与分组反转链表
- 统一建模语言UML基础知识
- IDEA插件-Translation提示更新TKK失败,配置有道翻译解决
- word里画的流程图怎么全选_怎么用word画流程图
- Dfam:真核生物转座元件数据库
- paypal创始人_艾问PayPal创始人彼得·蒂尔(无删减)
- python之WeChat撩妹神奇
- java阶梯算法_上楼梯算法的java实现(转)
- 用matlab做出漂亮sci论文插图,我的6分SCI插图,就是用这9个软件画出来的!
- 常用RL算法的主要特性
- 李文胜oracle,2014年下期解放学校防火演练方案.doc
- SEO知识(总结土著游民)(1)
- Colab提示使用限额,这方法你用了吗?
- [国家集训队2012]电子对撞机nbsp;解题…
- 多少岁才能评中级工程师,需要工作业绩吗,需要几个工作业绩?
- 计算机故障报警声2声,电脑发出一长两短报警声的原因分析及解决办法