张三吃饭——竟吃出了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请求回退——无影响(缓存)

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


相关文章
|
4月前
|
Android开发 Kotlin
|
4月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
564 2
|
7月前
|
缓存 搜索推荐 CDN
HTTP缓存策略的区别和解决的问题
总的来说,HTTP缓存策略是一种权衡,需要根据具体的应用场景和需求来选择合适的策略。理解和掌握这些策略,可以帮助我们更好地优化网页性能,提高用户的浏览体验。
219 11
|
8月前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
456 3
|
9月前
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
|
9月前
|
缓存 安全 API
为什么 HTTP GET 方法不使用请求体?
本指南深入探讨了为什么HTTP GET方法通常不使用请求体,解释了GET方法的主要用途及其设计原则。GET请求旨在通过URL安全、幂等地检索数据,避免因请求体带来的复杂性和潜在问题。尽管HTTP/1.1规范允许GET请求包含请求体,但这并不常见且可能引发副作用。掌握这些原则有助于开发者在API开发中更高效地使用GET请求。
|
9月前
|
API
掌握 HTTP 请求的艺术:理解 cURL GET 语法
掌握 cURL GET 请求的语法和使用方法是 Web 开发和测试中的基本技能。通过灵活运用 cURL 提供的各种选项,可以高效地与 API 进行交互、调试网络请求,并自动化日常任务。希望本文能帮助读者更好地理解和使用 cURL,提高工作效率和代码质量。
749 7
|
9月前
|
数据采集 缓存 负载均衡
动态HTTP代理与静态HTTP代理的区别及HTTP代理的常见用途与类型
HTTP代理在网络通信中扮演重要角色,优化数据传输并提供隐私保护和访问控制。本文对比动态与静态HTTP代理,探讨其特点、优劣势及适用场景。静态代理地址固定,适合稳定环境;动态代理灵活切换服务器,增强隐私保护。此外,介绍HTTP代理的常见用途(如缓存加速、匿名浏览、绕过限制等)及类型(透明、普匿、匿名、高匿、正向、反向代理),帮助用户根据需求选择合适的代理方式。最后提醒用户遵守法律法规,确保安全使用。
347 1
|
数据格式
Http之Get/Post请求区别
  Http之Get/Post请求区别1.HTTP请求格式:[]在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。
626 0

热门文章

最新文章