注:POST和GET,有什么区别?
我相信这个问题,大多同志在面试的时候都遇到过,那它们之间到底有什么区别呢?我最近也是刚接触了这个问题,所以我就通过总结也让自己能够更多的学到东西,能够让自己的基础知识更牢固吧。
首先,既然讲到区别,我就先讲下好多同志对它的错误认识以及看法,看看你在不在其中。
一丶对post与get区别的错误理解
- 错误一:get安全性非常低,post安全性较高
这个看法,其实在我没深入接触它们之前也是这么认识的,但是现在通过学习,才发现我是大错特错。
你们以为的get不安全,是因为在地址栏能看见自己所提交的数据?而post却看不见,所以post比get安全? no no no 这样想你就大错特错了,来看图!!
get方法提交数据,下图。
好像确实是啊,自己提交的信息名字什么的都在地址栏,那么你再看一下下图的POST提交数据。
post方法提交数据
有没有发现它写的更详细呢?哈哈?还给你排个版!!!确实,相比之下,post方法提交的数据一般人不会发现,所以GET确实差了那么一丢丢。
然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文,要想安全传输,就只有加密,也就是 HTTPS
那么现在第一个错误基本可以确定了吧!!!!
错误二:get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
这个理解看上去写的很像真话,我都差点信了,但事实是这样的吗?no no no!!!!!!
下面我们看看w3cschool怎么说。
从图上对比来看好像确实是那么回事儿,但事实却不是那样。
注:HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。
浏览器原因就不说了,服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。(我认为这应该是正确的理解,哈哈哈)
所以,我感觉误区比较大的地方就是这两个地方,所以还是希望以后多加注意,我们都一样,不能随便信某度上的答案,要多查查资料。。。坑!!!
二丶get和post的区别
就说一下我自己了解的,不了解的我也不敢多说,我会慢慢补上来的!!!!借图说话,哈哈。
- get是获取数据的,而post是提交数据的。
只是它们的语义不同而已,各有各的,就好比汤勺就是喝汤用的,当然你用它炒菜也是可以的,只是有点别扭,而且是不是有点二二的感觉,哈哈哈。
注:HTTP请求,最初设定了八种方法。这八种方法本质上没有任何区别。只是让请求,更加有语义而已。
- OPTIONS 返回服务器所支持的请求方法
- GET 向服务器获取指定资源
- HEAD 与GET一致,只不过响应体不返回,只返回响应头
- POST 向服务器提交数据,数据放在请求体里
- PUT 与POST相似,只是具有幂等特性,一般用于更新
- DELETE 删除服务器指定资源
- TRACE 回显服务器端收到的请求,测试的时候会用到这个
- CONNECT 预留,暂无使用
2.GET 用于获取信息,是无副作用的,是幂等的,且可缓存, 而POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存。
我知道的,确定的暂时这么多,当然还有关于GET和POST的TCP连接的问题,我不敢确定所以不敢瞎说,待我理解深入后,再来补上一补。
还有更多的区别,我会一一确认然后慢慢补来!!!关于它们谁更安全啊?有没有限制啊?在上面的误区中已经写过了,就不写了。
当然,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参数,技术上是完全行的通的。
虽然写的东西不多,但也算是给自己一个小小的总结吧,如果有发现不对的地方,欢迎指出问题,本同志定会虚心接受~~~ 哈哈,好了,没了!
— END —