HTML的HTTP 中 GET 与 POST 的区别

99% 的人都理解错了 HTTP 中 GET 与 POST 的区别(转)



转自:WebTechGarden 微信公众号

GET 和 POST 是 HTTP 请求的两种基本方法,要说它们的区别,接触过 WEB 开发的人都能说出一二。

最直观的区别就是 GET 把参数包含在 URL 中,POST 通过 request body 传递参数。

你可能自己写过无数个 GET 和 POST 请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。

当你在面试中被问到这个问题,你的内心充满了自信和喜悦。
 

072536_U5BK_2896879.png

你轻轻松松的给出了一个“标准答案”:
  • GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
  • GET 产生的 URL 地址可以被 Bookmark,而 POST 不可以。
  • GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
  • GET 请求只能进行 URL 编码,而 POST 支持多种编码方式。
  • GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留。
  • GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。
  • 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
  • GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。
  • GET 参数通过 URL 传递,POST 放在 Request body 中。



(本标准答案参考自 w3schools)

“很遗憾,这不是我们要的回答!”
 

072621_vmDd_2896879.png



请告诉我真相。。。

如果我告诉你 GET 和 POST 本质上没有区别你信吗?

让我们扒下 GET 和 POST 的外衣,坦诚相见吧!

GET 和 POST 是什么?HTTP 协议中的两种发送请求的方法。

HTTP是什么?

HTTP 是基于 TCP/IP 的关于数据如何在万维网中如何通信的协议。

HTTP 的底层是 TCP/IP,所以 GET 和 POST 的底层也是 TCP/IP,也就是说,GET/POST 都是 TCP 链接。

GET 和 POST 能做的事情是一样一样的。你要给 GET 加上 request body,给 POST 带上 url 参数,技术上是完全行的通的。

那么,“标准答案”里的那些区别是怎么回事?
 



在我大万维网世界中,TCP 就像汽车,我们用 TCP 来运输数据,它很可靠,从来不会发生丢件少件的现象。

但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。

为了避免这种情况发生,交通规则 HTTP 诞生了。

HTTP 给汽车运输设定了好几个服务类别,有 GET, POST, PUT, DELETE 等等。

HTTP 规定,当执行 GET 请求的时候,要给汽车贴上 GET 的标签(设置 method 为 GET),而且要求把传送的数据放在车顶上(url 中)以方便记录。

如果是 POST 请求,就要在车上贴上 POST 的标签,并把货物放在车厢里。

当然,你也可以在 GET 的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在 POST 的时候在车顶上也放一些数据,让人觉得傻乎乎的。

HTTP 只是个行为准则,而 TCP 才是 GET 和 POST 怎么实现的基本。

但是,我们只看到 HTTP 对 GET 和 POST 参数的传送渠道(url 还是 requrest body)提出了要求。

“标准答案”里关于参数大小的限制又是从哪来的呢?
 



在我大万维网世界中,还有另一个重要的角色:运输公司。

不同的浏览器(发起 http 请求)和服务器(接受 http 请求)就是不同的运输公司。

虽然理论上,你可以在车顶上无限的堆货物(url 中无限加参数)。

但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制 url 长度在 2K 个字节,而(大多数)服务器最多处理 64K 大小的 url。超过的部分,恕不处理。

如果你用 GET 服务,在 request body 偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然 GET 可以带 request body,也不能保证一定能被接收到哦。

好了,现在你知道,GET 和 POST 本质上就是 TCP 链接,并无差别。

但是由于 HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

你以为本文就这么结束了?


我们的大 BOSS 还等着出场呢。。。

这位 BOSS 有多神秘?

当你试图在网上找“GET 和 POST 的区别”的时候,那些你会看到的搜索结果里,从没有提到他。

他究竟是什么呢。。。

GET 和 POST 还有一个重大区别,简单的说:GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。

长的说:对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 header,服务器响应 100(continue),浏览器再发送 data,服务器响应 200(返回数据)。

也就是说,GET 只需要汽车跑一趟就把货送到了,而 POST 得跑两趟,第一趟,先去和服务器打个招呼:“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为 POST 需要两步,时间上消耗的要多一点,看起来 GET 比 POST 更有效。

因此 Yahoo 团队有推荐用 GET 替换 POST 来优化网站性能。

但这是一个坑!!!跳入需谨慎。

为什么?
 

  • GET 与 POST 都有自己的语义,不能随便混用。
  • 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的 TCP 在验证数据包完整性上,有非常大的优点。
  • 并不是所有浏览器都会在 POST 中发送两次包,比如 Firefox 就只发送一次。



现在,当面试官再问你“GET与POST的区别”的时候,你的内心是不是这样的?
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用计算机可产生随机数,一种利用计算机生成随机数的方法

一种利用计算机生成随机数的方法(2012-07-16 23:22:33)标签:随机数函数数值计数器程序运行杂谈这里介绍一种利用计算机生成随机数的方法,微机都有系统计数器记录自运行开始以来的脉冲数,这是个规律变化的数字,只用它是不能产生随机…

每天最重要的2小时

每天最重要的2小时 各位优秀的同学们,大家早上好! 真的特别开心,我们还能继续相约YY空中平台一起学习。一个人走得快,一群人才能走得远。 我是来自一组的金鱼,就是那位拥有“七世记忆”的金鱼,原产地美…

html360度视角观赏,360度全景图是如何生成的?

360度全景图是如何生成的?360度全景图以其生动的交互和沉浸的体验,一直深受很多摄影爱好者的喜欢。不过对于普通的观赏者而言,这种可以360度自由观看的图片,还是具有神奇的魅力。今天,我就讲一讲一张360度全景图是如何生成的吧!普…

未结束的字符文字_PAT B1042:字符统计

题目描述:请编写程序,找出一段给定文字中出现最频繁的那个英文字母。输入格式:输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束&#…

圣诞表白html,圣诞节表白,最浪漫的表白方式

圣诞节是一个浪漫的节日,红色的圣诞,白色的你们,再适合表白不过了。那么,圣诞节表白,最浪漫的表白方式有哪些呢?和小编一起来看看吧!圣诞节表白1.看着梦幻的圣诞彩灯说“我能喜欢你吗”冬夜绚丽彩灯下的告白&#xff…

怎么发朋友圈才是合适和得体的?

怎么发朋友圈才是合适和得体的? 怎么发朋友圈才是合适和得体的?这个问题估计困扰了不少人。其实你转换一下想法,你作为别人朋友圈的读者,希望看到的是什么内容? 1.这人最近在忙什么? 有没有可能合作。 …

python 3d绘图库_python – 用于科学3d绘图的Mayavi的替代品

在没有令人满意的第一个答案和无法解释的downvote之后编辑: 我需要绘制一个在3D网格中构造的标量字段,如下所示: import numpy as np from mayavi import mlab dt 10 X,Y,Z np.mgrid[0:dt,0:dt,0:dt] F X**2Y**2Z**2 test mlab.figure(size (1024,7…

python数字转字符串_python如何将字符转换为数字

int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符…

计算机网络中缓存技术,编程达人

计算机缓存也就是通常说的Cache,对计算机编程有所了解的应该都知道,缓存常与Redis联系在一起,但是Redis仅仅是应用中的一部分。1、浏览器缓存浏览器面对的问题是网络访问的速度远远低于本地访问的速度,每次都访问造成网络开销太大…

计算机是怎么RUN起来的

1.实际上计算机只会实现输入、运算、输出 这三大模块缺一不可,缺少输入意味着没有用户能使用,缺少运算相当于一条电线毫无意义,缺少输出相当于一直堆积信息的垃圾箱 因此计算机的硬件是由大量的IC(Integrated Circuit 集成电路)组成&#…

python缺点这么多、为什么还流行_Python这么火,为什么说它不是未来的编程语言?...

本文转载自公众号“读芯术”(ID:AI_Discovery) Python这两年非常火,随处可见的广告让它逐渐变成了一种老少皆知的存在。 虽然问世几十年后,Python才得到编程社区的重视。 但是,其发展的势头似乎无人能及。自2010年年初以来&#x…

与计算机硬件系统紧密相关的程序设计语言是,与计算机硬件系统紧密相关的程序设计语言是...

摘要:计硬件智慧_章节测安全案树_食品试答。系统相关序设星尔章节应用雅_答案_超测验数学。紧密计语星尔整合章节满分雅_答案_超测试思维。...计硬件智慧_章节测安全案树_食品试答。算机学营销单元答案市场。系统相关序设星尔章节应用雅_答案_超测验数学。学_信公智…

快速掌握一门计算机语言,程序员5种编程入门方法,快速学会一门编程语言!...

技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢?这对于编程思想也是大有裨益的。每门设计语言都有其独特的设计思想,譬如PHP的关联数组perl、Ruby的对象模型源自Smalltalk。如何快速学会一门编程语言?下面w3csch…

数据结构与算法基本

栈的算法: 计算机内部空间是连续存储的,但是可以通过逻辑上改变内存的物理结构,数据在内存上呈现出的是连续分布状态 主要的典型数据结构 在实现栈这种数据结构时,首先要定义一个数组和一个变量。数组中所包含的元素个数就是栈的…

synchronized不能锁静态变量_面试官:请说一下对象锁和类锁的区别

有锁才有自由生活中不存在绝对的自由,绝对的自由通常对应的无序和混沌,只有在道德、法律、伦理的约束下的相对自由,才能使人感受到自由。而在多线程编程中,锁是至关重要的,锁就是道德,就是法律约束&#xf…

计算机主板开机接线端子,装机必看,机箱前置面板接线向导,不怕再接错线了...

对于新手来说,在自己DIY一台电脑整机的时候,肯定是既兴奋又恐慌。兴奋是自己总算能亲自动手,组装一台自己称心如意且个性化十足的台式机。让大家感到恐慌的是主板那么多针脚和接口,该从何处下手,对于不懂行不专业的人来…

atoi函数_每日干货丨C语言中的字符串处理库函数介绍与实现

strlen函数:求字符串的长度size_t strlen(const char *s)头文件:#include说明:求出s指向的字符串的长度(不包括null字符)。返回值:返回s指向的字符串的长度。size_t strlen(const char *s){size_t len 0;while(*s) len;return len;}strcpy和strncpy函数&…

从windows计算机中卸载office,如何彻底卸载电脑中的Office组件|Office办公软件卸载不干净怎么办...

‍有不少用户遇到原本在电脑中的软件卸载不干净,而无法重新安装软件的问题。比如说有位用户在安装Office办公软件时就是因为没有彻底卸载原先电脑中的软件才导致无法安装。接下来系统城小编就和大家分享一下彻底卸载电脑中的Office组件的方法。1、打开电脑自带的控制…

python调用函数怎么表示_Python---7函数(调用定义函数)

函数 Python内置了很多有用的函数,我们可以直接调用。 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs(),只有一个参数。可以直接从Python的官方网站查看文档:也可以在交互式命…

解决Android studio 的Glide 4.1.0第三方jar包如何导入libs目录

很多人在让自己的安卓实现导入外部的图片资源的时候遇到一系列的问题,今天就来好好解决 首先,相去github的官网下载这个jar包,下载任意一个即可,注意:你的网络可能会被墙,你可以换成手机的热点去下载&#…