get主要是从服务器上获取数据,post主要是向服务器提交数据
| GET | POST | |
|---|---|---|
| 书签 | 可收藏为书签 | 不可收藏为书签 |
| 缓存 | 能被缓存 | 不能缓存 |
| 对数据长度的限制 | 2048个字符/2k | 无限制 |
| 数据类型 | 只允许ASCll字符 | 无限制,也允许二进制数据 |
| 历史 | 参数可保存在浏览器历史中 | 参数不会保存在浏览器历史中 |
1. 报文上的区别
get和post在不带参数时两者没区别,有参数时,get参数在url中,post参数在body中
2. 都说post比get安全,是不是这样?
- 都说post比get安全,因为数据在url上不可见。
- 然而从传输的角度来说,他们都是不安全的,HTTP本身并不会对数据进行任何的加密,它在网络上是明文传输,只要在网络节点上抓包,就能完整地获取数据报文。
- 所以要想安全传输,就只有加密,也就是https,有了https后,get和post都是安全的。
post请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应