我们先试着从底层原理开始说起,往上一步一步理解:

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得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

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

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

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

总结一下:
GET

  1. GET请求参数包含在URL中传递,会被浏览器记录下来,安全性较低,用于传递非敏感字段。
  2. GET请求传参有大小限制,一般来说1024字节,每个浏览器对此限制不一样。所以GET一般用于请求数据。
  3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

POST

  1. POST请求,参数包含在RequestBody中传递。
  2. 浏览器先向服务器发送请求,服务器同意接受返回100 continue,然后浏览器再次发送包含请求参数的数据,对于验证数据的完整性有很大意义。GET产生一个TCP数据包;POST产生两个TCP数据包。
  3. POST请求理论上没有参数大小的限制,实际上post所能传递的数据量根据取决于服务器的设置和内存大小。而且参数包含在Request Body中用户不可见,安全性较高。
  4. 所以POST一般用于向服务器提交数据。

例子参考自:https://blog.csdn.net/chen_changying/article/details/80117702

HttpGET和POST的详细区别相关推荐

  1. 【视频】详解Scala中的类及与Java的详细区别

    详解Scala中的类及与Java的详细区别

  2. vuex中mutation和action的详细区别

    一.vuex中mutation和action的详细区别 const store = new Vuex.Store({state: {count: 0},mutations: {increment (s ...

  3. 图像技术_基础技术(0001)_RGB与CMYK的定义和详细区别

    图像技术_基础技术(0001)_RGB与CMYK的定义和详细区别 基础技术: 本文部分内容来自网络 两者的定义 RGB:显示颜色,通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的 ...

  4. 魅蓝5s的android系统版本,魅蓝5s有几个版本?魅蓝5s标准版和高配版详细区别对比评测...

    魅族在北京召开魅蓝新品发布会,正式发布了全新升级版魅蓝5s新品,这款新品可以说是一款过渡产品,要说要比上一代产品升级也不是很明显,算是小幅度的提升,主要加入了快充和提升了运行内存大小.那么魅蓝5s有几 ...

  5. acer蜂鸟swift1深度linux,宏碁蜂鸟Swift3和Swift1哪个值得买?宏碁蜂鸟Swift1和Swift3详细区别对比评测...

    蜂鸟Swift系列笔记本是宏碁旗下主打轻薄.长续航的产品.今日,宏碁官方宣布,全新蜂鸟Swift系列--Swift 3.Swift 1将于5月25日正式发售,目前已经接受预约.宏碁蜂鸟Swift3和S ...

  6. Java中final、finally、finalize的简单区别,中等区别,详细区别(Lawliet 修改+注释版)

    简单区别:      中等区别:    虽然这三个单词在Java中都存在,但是并没有太多关联:  final:java中的关键字,修饰符. 1.如果一个类被声明为final,就意味着它不能再派生出新的 ...

  7. 小米note2不上Android9吗,小米note2和华为g9哪个好?小米note2和华为G9青春版详细区别对比评测...

    小米note2介绍: 小米note2详细参数,详情如下所示,参数党必看: 小米note2硬件配置参数 屏幕规格 5.7英寸 CPU型号 高通骁龙821 RAM内存 4GB/6GB ROM存储 64GB ...

  8. 荣耀平板2 android go,荣耀平板2和华为M2哪个好?华为荣耀平板2和华为M2详细区别对比评测_硬件教程...

    华为近日刚刚举行了2016新品发布会,不仅发布了荣耀畅玩6X,同时也发布了荣耀手表S1和荣耀平板2,而荣耀平板2拥有8寸的屏幕是千元价格的小屏幕平板,那么荣耀平板2和华为M2哪个好?荣耀平板2和华为M ...

  9. PMSM矢量控制笔记(1.2)——隐机电机与凸极电机的详细区别

    前言: 永磁同步电机的转子包括永磁体.转子铁芯.轴承等机械结构等,其转子可以制成实心的形式,也可以由压片压制而成,其上装有永磁体材料.根据电机转子上永磁材料安装位置的不同,可以将永磁同步电机分为表贴式 ...

最新文章

  1. ubuntu无法获得锁 /var/lib/dpkg -open 问题
  2. annotations_Spring Annotations我从来没有机会使用第2部分:@ConfigurationProperties
  3. CSS语法规范(CSS、HTML)
  4. python自学行吗-《》 python自学行吗?
  5. 反转链表与分组反转链表
  6. 统一建模语言UML基础知识
  7. IDEA插件-Translation提示更新TKK失败,配置有道翻译解决
  8. word里画的流程图怎么全选_怎么用word画流程图
  9. Dfam:真核生物转座元件数据库
  10. paypal创始人_艾问PayPal创始人彼得·蒂尔(无删减)
  11. python之WeChat撩妹神奇
  12. java阶梯算法_上楼梯算法的java实现(转)
  13. 用matlab做出漂亮sci论文插图,我的6分SCI插图,就是用这9个软件画出来的!
  14. 常用RL算法的主要特性
  15. 李文胜oracle,2014年下期解放学校防火演练方案.doc
  16. SEO知识(总结土著游民)(1)
  17. Colab提示使用限额,这方法你用了吗?
  18. [国家集训队2012]电子对撞机nbsp;解题…
  19. 多少岁才能评中级工程师,需要工作业绩吗,需要几个工作业绩?
  20. 计算机故障报警声2声,电脑发出一长两短报警声的原因分析及解决办法

热门文章

  1. 移动浏览器内核及连接数
  2. 【点击链接,自动下载安装APP,小米公司的坑】在浏览器中, 我们以为回退就能解决误点击。其实是不管用的。
  3. 王者荣耀背后的实时大数据平台用了什么黑科技?
  4. Unexpected token u in JSON at position 0 解决
  5. java中虚函数_虚函数
  6. 项目经理如何写年终总结,范文+PPT模板
  7. docxtpl使用手册
  8. 自动排哨位管理系统开题报告
  9. 分析周杰伦超话爬虫思路
  10. BGA焊接开裂失效分析案例