1. GET 和 POST定义
GET 和 POST 都是 HTTP 协定的一种请求标准,同样基于 TCP 传输层协议。两者主要区别在存放数据的方式不同,进而造成的传输量、安全性等差异,那么这两种请求方式哪个安全性更高呢?往下看
GET 请求
先来看一下 GET 是怎么传送信息的:
<form method="get" action=""> <input type="text" name="id" /> <input type="submit" /> </form>
上面代码点击“提交”之后,浏览器的网址会变成 http://www.a.com/a.html?id=11111,浏览器会自动将表单内容转为 Query String 加在 URL 后面进行请求,这样从浏览器的网址中可以看见表单要传送的资料。
POST 请求
接下来看看 POST 的传送:
<form method="post" action=""> <input type="text" name="id" /> <input type="submit" /> </form>
提交之后,地址并无变化,但是通过查看 HTTP Request 的内容可以发现,POST 是将表单资料放在 Message Body 进行传送的。
2. 对post与get区别的错误理解
2.1 :错误一 get安全性非常低,post安全性较高
这个看法,其实在我没深入接触它们之前也是这么认识的,但是现在通过学习,才发现我是大错特错。
你们以为的get不安全,是因为在地址栏能看见自己所提交的数据?而post却看不见,所以post比get安全? no no no 这样想你就大错特错了,来看图!!
get方法提交数据,下图:

post方法提交数据:

有没有发现它写的更详细呢?哈哈?还给你排个版!!!确实,相比之下,post方法提交的数据一般人不会发现,所以GET确实差了那么一丢丢。
然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文,要想安全传输,就只有加密,也就是 HTTPS
那么现在第一个错误基本可以确定了吧!!!!
2.2 :错误二 get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
这个理解看上去写的很像真话,我都差点信了,但事实是这样的吗?no no no!!!!!!
下面我们看看w3cschool怎么说。

从图上对比来看好像确实是那么回事儿,但事实却不是那样。
注:HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。
浏览器原因就不说了,服务器是因为处理长 URL 要消耗比较多的资源,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。(我认为这应该是正确的理解,哈哈哈)
所以,我感觉误区比较大的地方就是这两个地方,所以还是希望以后多加注意,我们都一样,不能随便信某度上的答案,要多查查资料。。。坑!!!
3. get和post的区别
就说一下我自己了解的,不了解的我也不敢多说,我会慢慢补上来的!!!!借图说话,哈哈。
3.1 get是获取数据的,而post是提交数据的。
只是它们的语义不同而已,各有各的,就好比汤勺就是喝汤用的,当然你用它炒菜也是可以的,只是有点别扭,而且是不是有点二二的感觉,哈哈哈。
注:HTTP请求,最初设定了八种方法。这八种方法本质上没有任何区别。只是让请求,更加有语义而已。
- OPTIONS 返回服务器所支持的请求方法
- GET 向服务器获取指定资源
- HEAD 与GET一致,只不过响应体不返回,只返回响应头
- POST 向服务器提交数据,数据放在请求体里
- PUT 与POST相似,只是具有幂等特性,一般用于更新
- DELETE 删除服务器指定资源
- TRACE 回显服务器端收到的请求,测试的时候会用到这个
- CONNECT 预留,暂无使用
3.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参数,技术上是完全行的通的。