你必须知道的get与post的真正区别

咱们会常常看到有人问:http协议中GET请求和POST请求有什么区别~?web

 

这个问题看似很简单,可是不一样程度的人会回答出不一样的结果。在公司的面试中,也会常常的问及相似这样的问题,看似很简单,可是不一样层次的人会回答出不一样的结果。那么咱们今天就来聊聊HTTP协议中GET与POST的真正区别。面试

 

咱们仍是要用一句简练的话来回答GET和POST的区别:浏览器

说起GET和POST的区别,必定要肯定基于什么前提。在不一样的前提下有不一样的答案。安全


 

 

这么简单的GET和POST背后有什么神秘的面纱呢?咱们今天就用举例子来说给你们~服务器

 

//////////网络

 

邓哥家住在吃鸡村,邓嫂家住在农药屯。邓哥到邓嫂家能够有不少种选择,走着去、驾车去、坐火车去等等。邓哥一般选择驾车过去。app

 

这里吃鸡村和农药屯就至关因而互联网中的两台计算机,邓哥和邓嫂至关因而这两台计算机中的两个程序,这两个程序之间想要通讯能够有不少种协议,就比如有不少种交通方式能够到达。咱们假设驾车这种方式就是网络中的HTTP协议。学习

 

邓哥家有两辆车,一辆轿车,一辆箱式货车。编码

 

两种车就比如是HTTP协议中的两种方式,咱们假设轿车是GET请求方式,箱式货车是POST请求方式。url

 

有一天邓哥想接邓嫂来吃鸡村玩,邓哥准备开箱式货车去接邓嫂。

 

邓哥要去接邓嫂,就比如程序A要向程序B发出一个请求。从原理上说,不管是轿车仍是货车都是车,都可以把人接回来。因此在本质上,GET请求和POST请求都能拉取数据。

 

这时候,邓哥的父亲(也就是隔壁老王)出来了,说道:“你是否是傻,去接人开轿车多好啊,开货车干吗?费油不说,没准人家那还不让货车停车呢!”

 

既然GET和POST均可以作到拉取数据,那么为何咱们一般拉取数据使用GET而不使用POST呢?

 

在故事中,隔壁老王不让邓哥开卡车去接邓嫂,那么在现实中,是否是也有一个“隔壁老王”这样的角色在限制咱们呢?

 

答案是:有的!这个现实中的“隔壁老王”就是ISO国际标准化组织,这个组织也说了一堆相似隔壁老王的话,这堆话被称为RFC规范。

 

因此说,咱们常说的HTTP协议其实是基于RFC规范的,实际上GET和POST请求的语法是彻底相同的,可是在RFC规范中,给GET请求和POST请求规定了语义,规定GET用来获取信息,POST用来发送信息。

 

当过年的时候,邓哥想要给邓嫂家送一些年货的时候,邓哥按照隔壁老王的嘱咐,开着货车给邓嫂家送年货去了。固然,送过去了一些蔬菜也会稍微拉回来一点水果~

 

这就是按照RFC的规范来执行的,当邓哥想要送年货的时候,就会开货车过去;在互联网环境中,若是想要发送信息就要使用POST方法。

POST方法虽然是发送消息的,但也是有Response的,在请求返回的时候带回来一点数据也是被容许的。

 

那么这时候问题又来了,邓哥若是不听老王的怎么办?那这个规范不就没有做用了吗?这个时候老王也是颇有办法的,老王就坐在院子门口,若是邓哥想运货出去的时候,开的不是货车就不让出院门~

 

光有规范没有具体的软件实施也是没有意义的,因此不少的软件听从了RFC的规范,好比咱们熟悉的Chrome浏览器。因此咱们想用GET方式发送文件或者图片是不可能的~就像邓哥不可能用轿车去给邓嫂送年货同样。

 

因此咱们最后来总结一下:

 

当人们问起GET和POST的区别时,咱们要先肯定,这里的GET和POST是基于什么前提的?

 

1. 若是什么前提都没有,也就是不用任何规范限制的话,咱们只考虑语法来讲,这两个方式是没有任何区别的,只有名字不同。

 

2. 若是是基于RFC规范的,那么问题就又来了。是基于RFC理论的,仍是基于具体的实现的。

 

1)若是是基于RFC理论的,咱们称这个为Specification。那么GET和POST是具备相同的语法,可是不具有相同的语义,GET方式用做获取信息,POST方式用做发送信息。

 

2)若是是基于RFC的具体实现的,咱们称之为implementation。其实要区分是具体的哪种实现。咱们一般默认指的是浏览器实现的RFC。固然不止浏览器,咱们任何人均可以设计一个HTTP协议的接口,使用RFC规范,固然这些是咱们不用考虑的,由于并不通用。

 

因此咱们只须要考虑浏览器实现的RFC,或者说Web环境下的RFC。这个前提下的答案,就是咱们最多见的那些。我就简单的列举在下面了~

 

a) GET的数据在 URL 中对全部人都是可见的。POST的数据不会显示在 URL 中。

 

b) GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。

 

c) GET可收藏为书签,POST不可收藏为书签。

 

d) GET后退按钮/刷新无影响,POST数据会被从新提交(浏览器应该告知用户数据会被从新提交)。

 

e) GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

 

f) GET历史参数会保留在浏览器历史中。POST参数不会保存在浏览器历史中。

 

g) GET只容许 ASCII 字符。POST没有限制。也容许二进制数据。

 

h) 与 POST 相比,GET 的安全性较差,由于所发送的数据是 URL 的一部分。在发送密码或其余敏感信息时毫不要使用 GET !POST 比 GET 更安全,由于参数不会被保存在浏览器历史或 web 服务器日志中。

 

以上这些点都是咱们常见的,还有一些咱们不常见的,好比GET请求只会有一次TCP链接,而POST请求会有两次TCP链接。在这背后也有许多的设计和考虑~

 

因此在咱们不要认为GET和POST请求有什么区别是一个很简单的问题哦~不少简单的问题背后都有着很复杂的背景。

 

 

//////////

 

其实这也提醒着咱们在学习和生活中不要失去好奇心。就像咱们为何是站在地球上而不是飘在空中?太阳为何老是东升西落?天空为何是蓝色的而不是其余颜色?为何人类都有眼睛鼻子和嘴?

 

不少咱们认为是理所固然的背后都有着它理所固然的道理。也许这个道理就是另外一个全新世界的大门~!但愿你可以在这个浮躁的世界中保持着一颗纯洁的好奇心~!

 

若是你是个技术小白,也欢迎你来到咱们的讨论群,在这里咱们会一块儿讨论技术相关的问题,俗话说的好,三个臭皮匠胜过诸葛亮嘛,也许多几我的出主意,你的技术难题就被瞬间攻破了呢。在这里咱们还会一块儿分享资源,不管是学习的仍是一些面试题啦,还有一些一线互联网公司的招聘信息。

 

相关文章
相关标签/搜索