共计 2395 个字符,预计需要花费 6 分钟才能阅读完成。
最近我在做前端面试题总结系列,感兴趣的敌人能够增加关注,欢送斧正、交换。
争取每个知识点可能多总结一些,至多要做到在面试时,针对每个知识点都能够侃起来,不至于哑火。
前言
在前后端交互的过程中,应用频率最高的莫过于 GET 和 POST 这两个办法,并且这也是面试中被问到频率很高的知识点。
面试经常会问:GET 和 POST 办法的区别是什么?
这个问题经常会导致咱们只关怀了它们两个之间的一些差别,而疏忽了它们之间的共性,所以对于问题的答复就略显通俗。
明天咱们就来深扒一下两个办法到底有何异同。
相同点
如果我要说,GET 和 POST 的实质是雷同的,不晓得有多少人会有异议?
GET 和 POST 办法只是 HTTP 协定为了不同分工而规定的两种申请形式。
HTTP 是什么?HTTP 是基于 TCP/IP 的对于数据如何在万维网中如何通信的协定。
HTTP 的底层是 TCP/IP。所以 GET 和 POST 的底层也是 TCP/IP,也就是说,GET 和 POST 都是 TCP 链接 。所以说,它们的实质是雷同的。
GET 和 POST 之所以产生,要通过 HTTP 的规定和浏览器 / 服务器的限度进行辨别,使它们在利用过程中体现出不同。
整个申请过程大略是这样的:
- 客户端 IP 发出请求。
- 收回的申请数据包会通过 TCP,经网络传输给近程服务端 IP。
- 服务端 IP 收到申请包之后,解析并解决申请包最初服务端会通过 TCP 将处理结果返回给客户端。
- 用户便能够查看到想要的响应数据。
区别
尽管说 GET 和 POST 申请的实质是雷同的 —— 都是 TCP 连贯,然而,在平时的应用中还是存在肯定区别的。
咱们这里所说的区别其实都是约定俗成的一些货色,有些区别的界线可能不是很明确。
作用不同
既然是为了不同分工而产生的两种办法,那么它们作用必定是不同的:
- GET 多用于从服务端获取资源
- POST 个别用来向服务端提交资源
其实这是一句废话,之所以列出来,是为了内容更全面一些。
参数传递形式不同
这一点应该是咱们可能最直观地察看到的。
- GET 的参数个别是通过
?
跟在 URL 前面的,多个参数通过&
连贯,比方:www.example.com?serach=bianchengsanmei&content=123
。 - POST 的参数个别是蕴含在
request body
中的
其实,这个区别不是相对的,GET 也能够通过 params 携带参数,而 POST 的 URL 前面也能够携带参数,只是咱们通常不倡议这么做而已。
安全性不同
因为参数传递形式的不同,所以 GET 和 POST 的安全性不同:GET 比 POST 更不平安,因为参数间接裸露在 URL 上,所以 GET 不能用来传递敏感信息。
从传输的角度来说,他们都是不平安的,因为 HTTP 在网络上是明文传输的,只有在网络节点上捉包,就能残缺地获取数据报文,要想平安传输,就只有加密,也就是 HTTPS。
参数长度限度不同
GET 和 POST 传递参数的长度不同:
- get 传送的数据量较小,不能大于 2KB。
- post 传送的数据量较大,个别被默认为不受限制。
在这里咱们要明确一点:HTTP 协定没有 Body 和 URL 的长度限度,对 URL 限度的大多是浏览器和服务器的起因。
服务器是因为解决长 URL 要耗费比拟多的资源,为了性能和平安(避免歹意结构长 URL 来攻打)思考,会给 URL 长度加限度。
参数数据类型不同
参数的数据类型,GET 只承受 ASCII 字符,而 POST 没有限度。
编码方式不同
GET 申请只能进行 URL 编码(application/x-www-form-urlencoded)
POST 反对多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据应用多重编码。)
缓存机制不同
这个须要从以下几点来阐明:
- GET 申请会被浏览器被动 cache,而 POST 不会,除非手动设置。
- GET 申请参数会被残缺保留在浏览器历史记录里,而 POST 中的参数不会被保留。
- GET 产生的 URL 地址能够被 Bookmark,而 POST 不能够。
- GET 在浏览器回退时是有害的,而 POST 会再次提交申请。
工夫耗费不同
GET 和 POST 申请工夫的不同次要是因为:
- GET 产生一个 TCP 数据包;
- POST 产生两个 TCP 数据包。
对于 GET 形式的申请,浏览器会把 header 和 data 一并发送进来,服务器响应 200(返回数据);而对于 POST,浏览器先发送 Header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据),详细分析一下:
POST 申请的过程:
- 浏览器申请 TCP 连贯(第一次握手)
- 服务器许可进行 TCP 连贯(第二次握手)
- 浏览器确认,并发送 POST 申请头(第三次握手,这个报文比拟小,所以 HTTP 会在此时进行第一次数据发送)
- 服务器返回 100 Continue 响应
- 浏览器发送数据
- 服务器返回 200 OK 响应
GET 申请的过程:
- 浏览器申请 TCP 连贯(第一次握手)
- 服务器许可进行 TCP 连贯(第二次握手)
- 浏览器确认,并发送 GET 申请头和数据(第三次握手,这个报文比拟小,所以 HTTP 会在此时进行第一次数据发送)
- 服务器返回 200 OK 响应
在网络环境好的状况下,发一次包的工夫和发两次包的工夫差异根本能够忽视。而在网络环境差的状况下,两次包的 TCP 在验证数据包完整性上,有十分大的长处。
总结
GET 和 POST 的异同点就总结了这么多,因为工夫仓促,疏漏之处在劫难逃,欢送斧正,本文会继续改良!
~
~ 本文完,感激浏览!
~
学习乏味的常识,结识乏味的敌人,塑造乏味的灵魂!
大家好,我是〖编程三昧〗的作者 隐逸王 ,我的公众号是『编程三昧』,欢送关注,心愿大家多多指教!
你来,怀揣冀望,我有墨香相迎!你归,无论得失,唯以余韵相赠!
常识与技能并重,内力和外功兼修,实践和实际两手都要抓、两手都要硬!
参考资料:
[1] GET 和 POST 两种根本申请办法的区别
[2] 面试必备:GET 和 POST 的区别具体讲解
[3] POST 与 GET 的区别