http请求 get 和 post 的区别
GET和POST是HTTP请求的两种基本方法。
浏览器用GET请求来获取一个html页面/图片/css/js等资源;用POST来提交一个<form>表单,并得到一个结果的网页。
区别 | get | post |
发送数据长度 | 在URL中传送的参数是有长度限制 | 一般被默认为不受限制 |
发送数据类型 | 只能发送ASCII字符 | 没有限制 |
速度 | 快 | 慢 |
安全性 | 低 | 高 |
编码 | 只能进行url编码 | 支持多种编码方式 |
1. 为什么get比post快?
1.1 post在请求的body部分包含数据,请求头字段更多。
1.2 get产生一个TCP数据包,post产生两个TCP数据包。
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响应
2. 为什么get 的安全性比 post 低?
2.1 get 参数通过 url 明文传递,post 则放在 request body 中
2.2 get 参数会被完整保留在浏览器历史记录里,post 不会
2.3 get 会被浏览器主动缓存,post 不会
2.4 get 会被保存在服务器日志,post 不会