张三吃饭——竟吃出了HTTP中GET和POST的区别?

简介: 文章通过故事情节的引入,介绍了http连接中GET和POST的区别以及原因。

阅读提示:核心内容为红字,如想提取关键信息请阅读红字,若想看完整故事,请顺序阅读 。

背景:这是一个普通的夜晚,这亦是一个不平凡的夜晚。深夜,米饭大王——''POST.张三''和面条皇帝——''GET.李四''(下文简称:张三po、李四ge),这俩师兄弟在经历面向对象编程大哥的一顿毒打之后,被迫流落到了计算机网络中的珠穆朗玛峰——应用层山脉上的五星级客栈——HTTP客栈——吃饭!!!

       刚进饭店,饭店门口一栏显著的标语映入眼帘:


  • http1.0和http1.1都是基于TCP/IP的应用层协议,GET方法和POST方法在在传输层都是通过发送tcp报文进行传输,本质上并无区别,但实际应用的时候,会有区别

       这时张三po同学不解的问到:既然本质上没有区别,为什么还要分GET和POST方法?

       李四ge:你真笨啊!那你平时吃饭就吃饭,为什么还要分用筷子吃饭和用勺子吃饭呢......

       张三po:不,我家里筷子去年跟人跑了,我最近几年吃饭只用勺子吃。

       李四ge:滚!!!

  • 传输tcp报文 = 张三po和李四ge吃饭的过程                      
  • 使用POST方法和使用GET方法 = 使用勺子吃饭和使用筷子吃饭
  • 设定POST、GET的目的:对完成tcp传输报文设置多种处理方法

       李四ge表示活久见,于是问道:你不知道世界上有一种叫面条的东西吗?别告诉我,你从来不用筷子吃面?

       张三po:不,我从来不吃面条,我只吃米饭,所以大家都叫我米饭大王——张三po。

  • 勺子 = POST          筷子 = GET
  • 使用POST提交数据 = 使用勺子吃米饭
  • 使用GET获取网页信息 = 使用筷子吃面条
  • 为处理不同事情,定义不同方法,针对性处理

       张三po见李四ge不太聪明的样子,于是乎直接找掌柜的点了一碗鱼骨面条,找了个远离李四ge的角落坐下休息,李四ge见状,有模有样地学张三po的样子,点了一份,超级精华版大大大的鲮鱼饭团——然后坐在了李四ge旁边。

       客栈效率很快,香喷喷的饭团和热乎乎的面条10秒钟后就送上餐桌,两人心照不宣地狼吞虎咽起来。

       李四ge一口气嗦了3条2米长的面条,但无奈嘴巴不够大,只能夹断,分成两次嗦。

       张三po:李四ge,你知道我一勺子吃了多少粒米饭吗?

       李四ge:你那饭团一坨一坨的,直接装成一个大Body,我咋知道有几粒啊???

       张三po:但是我看得到你一筷子夹着嗦了3条面条哎!!!

       李四ge:我为什么要让你看见我吃几条面条,以至于让你来问我这个问题啊!!!!!

  • 一勺子吃的米粒数量——POST数据参数不可见,信息装填在Body部分传输
  • 一筷子吃的面条数量——GET数据参数在地址栏可见,数据参数拼接在URL后(不安全性)
  • 没有规定一口只能嗦多长的面条,但是嘴巴大小有限,限制嗦面条的长度——
  • HTTP标准没有明确制定URL的长度,但是一般浏览器支持的URL长度为,因此使用GET传输数据就会受到URL长度的限制。

       李四ge:这个夜晚我永生难忘

       张三po:为什么呀?是因为和我在一起太开心了所以永生难忘吗?那可太不好意思了哎!

  • POST请求不会被浏览器缓存(推协议)
  • GET请求会被浏览器缓存(拉协议),永生难忘~

      (hint: 他们师门的祖传传统仪式,吃完一顿饭必须大喊:我吃完了!以表示对劳动人民辛勤汗水的尊敬)  (hint:面条吃下去,代表真的没有鱼刺,饭团吃下去,可能卡在喉咙,得确认两次)  

       十分钟过去了,李四ge:我吃完了!(表示没有鱼刺)

       张三po把大碗往桌子上一扔,大喊:我吃完了!

       张三po:没......没......咳咳......ge,李四ge我被鱼刺卡住了!!!

  • GET请求把请求头部和data一并发送出去,一气呵成~
  • POST请求先发送请求头部,等待服务器响应,在发送data
  • 在网络环境好时,两次数据包发送时间差可忽略不计,在Firefox中POST只发一次包。

(这家店的食物是天下独绝,没有练过胃部力量的人无法消化,张三po没练过,但李四ge练过)

       很快在李四ge的帮助下,张三po成功将鱼刺取出,但这时,张三po的胃由于消化不了这家客栈的鲮鱼饭团,于是乎肚子疼了起来,而李四ge却没有事情。

  • 胃 = 服务器      
  • 服务器需要以特定方式获取请求的数据
  • 服务器处理GET需要通过Request.QueryString来获取数据
  • 服务器处理POST需要通过Request.Form来获取数据

       在一阵挣扎之后,张三po成功将刚吃下去的鱼刺吐了出来,顺便在李四ge身上也吐了几坨刚刚下肚的饭团。李四ge感到了一丝丝痛苦,他挣扎着,彷徨着,呐喊着,但他还是没有吐出来,他的胃部功能变得逐渐强大——再强大——越来越强大——不到一刻钟的时间,李四ge获得了一种超能力——永久免疫张三po的呕吐袭击!!!而张三po在历经地狱般痛苦的折磨之后,胃部自此百毒不侵!!!

  • 张三po改变了胃部的功能变得更加强大
  • 李四ge留下了永久免疫
  • POST 可以修改变服务器上的资源
  • GET请求的资源会被浏览器主动缓存的,再次请求相同内容,就会返回缓存的内容

      这时,客栈老板看俩师兄弟意志如此坚定,道德如此高尚,便拿出镇店之宝——月光宝盒,给予师兄弟两人一次回到过去的机会!重回进店之时,愉快地度过这个美好的夜晚。

       李四ge急了:你还想让我再让我经历一次???还不如让我去被面向对象编程再毒打一顿。

       张三po:如果上天再给我一次机会回到过去,我会说:我愿意!!!

  • POST请求后退——重新提交请求
  • GET请求回退——无影响(缓存)

小结

http1.0和http1.1都是基于TCP/IP的应用层协议,GET方法和POST方法在在传输层都是通过发送tcp报文进行传输,本质上并无区别,但实际应用的时候,会有区别。
  • 设定POST、GET的目的:对完成tcp传输报文设置多种处理方法,为处理不同事情,定义不同方法,针对性处理
  • POST数据参数不可见,信息装填在Body部分传输
  • GET数据参数在地址栏可见,数据参数拼接在URL后(不安全性)
  • HTTP标准没有明确制定URL的长度,但是一般浏览器支持的URL长度为,因此使用GET传输数据就会受到URL长度的限制。
  • POST请求不会被浏览器缓存(推协议)
  • GET请求会被浏览器缓存(拉协议)
  • GET请求把请求头部和data一并发送出去
  • POST请求先发送请求头部,等待服务器响应,在发送data
  • 服务器需要以特定方式获取请求的数据
  • 服务器处理GET需要通过Request.QueryString来获取数据
  • 服务器处理POST需要通过Request.Form来获取数据
  • POST 可以修改变服务器上的资源
  • GET请求的资源会被浏览器主动缓存的,再次请求相同内容,就会返回缓存的内容
  • POST请求后退——重新提交请求
  • GET请求回退——无影响(缓存)

⭐博主首次尝试故事风格解说介绍知识,如有不足之处,欢迎评论私信批评指正,如果觉得文章不错的话,点个赞支持一下呗~~~


相关文章
|
7天前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。
|
1月前
automate Flow中如何用HTTP,POST的方式发送短信?
automate Flow中如何用HTTP,POST的方式发送短信?
32 2
|
2月前
|
存储 运维 Java
函数计算产品使用问题之如何使用Python的requests库向HTTP服务器发送GET请求
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
安全 程序员 网络安全
HTTP和HTTPS的区别,你真的了解吗?
大家好,我是你们的技术小伙伴小米!今天我们来聊聊HTTP和HTTPS的区别以及HTTPS链接的建立过程,同时了解两种常见的加密算法——对称加密和非对称加密。通过这篇文章,你将深入理解这些网络基础知识,为网站安全保驾护航!
51 7
|
1月前
|
移动开发 JavaScript 前端开发
"解锁axios GET请求新姿势!揭秘如何将数组参数华丽变身,让你的HTTP请求在云端翩翩起舞,挑战技术极限!"
【8月更文挑战第20天】二维码在移动应用中无处不在。本文详述了在UniApp H5项目中实现二维码生成与扫描的方法。通过对比插件`uni-app-qrcode`和库`qrcode-generator`生成二维码,以及使用插件和HTML5 API进行扫描,帮助开发者挑选最佳方案。无论是即插即用的插件还是灵活的JavaScript实现,都能满足不同需求。
26 0
|
1月前
|
安全 网络协议 搜索推荐
http和https分别是什么?区别是什么?
http和https分别是什么?区别是什么?
64 0
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
HTTPS与HTTP的一些区别
HTTPS与HTTP的一些区别
|
2月前
|
测试技术 Python
我们假设要测试一个名为`http://example.com`的网站,并对其进行简单的GET请求性能测试。
我们假设要测试一个名为`http://example.com`的网站,并对其进行简单的GET请求性能测试。
|
2月前
|
开发框架 网络协议 Java
RPC调用和HTTP调用的区别你知道吗
RPC调用和HTTP调用的区别你知道吗
|
2月前
|
监控 安全 搜索推荐
http和https的区别是什么?
在互联网安全日益成为焦点的今天,使用HTTPS不仅是一种趋势,更是网站运营的基本要求之一。它不仅能够保护用户隐私和数据安全,还能提升网站的可信度和搜索引擎排名。因此,无论是个人网站还是企业级应用,都应当考虑使用HTTPS来保护用户和数据的安全,迈向一个更加安全和可靠的网络环境。
53 0

热门文章

最新文章