1. 区别
| GET | POST | |
|---|---|---|
| 后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
| 书签 | 可收藏为书签 | 不可收藏为书签 |
| 缓存 | 会被浏览器自动缓存 | 不会被浏览器自动缓存,除非手动设置头部缓存标识(响应包含适当的Cache-Control或Expires头字段) |
| 编码类型 | 只支持application/x-www-form-urlencoded编码 |
支持application/x-www-form-urlencoded或multipart/form-data等多种编码方式 |
| 历史 | 参数保留在浏览器历史中 | 参数不会保留在浏览器历史中 |
| 对数据长度的限制 | 当发送数据时,GET方法向URL添加数据;URL的长度是受限制的(URL的最大长度是2048个字符) |
无限制 |
| 对数据类型的限制 | 只接受ASCII字符 |
没有限制,也允许二进制数据 |
| 传输安全性 | 与POST相比,GET的安全性较差,因为所发送的数据是URL的一部分,所以在发送密码或其他敏感信息时绝不要使用GET。并且GET方法更容易遭受CSRF攻击 |
POST比GET更安全,因为参数不会被保存在浏览器历史或web服务器日志中 |
| 可见性 | 数据在URL中对所有人都是可见的 |
数据不会显示在URL中 |
2. POST 方法比 GET 方法安全?
在HTTP协议里,所谓的“安全”是指请求方法不会对服务器上的资源进行修改,“破坏”服务器上的资源。
按照这种定义,GET请求方法是安全的,它对服务器资源执行的仅仅是只读操作,也是幂等的。
幂等指多次执行相同的操作,结果也都是相同的,即多次“幂”后结果“相等”。
POST请求方法是不安全的,它会修改服务器上的资源。在RFC里的语义,POST是指“新增或提交数据”,多次提交数据会创建多个资源,所以不是幂等的。
总结:
- GET:安全,幂等
- POST:不安全,不幂等
对于传输来说,
GET的安全性比POST要差,但是GET和POST报文在传输上都是不安全的,因为HTTP在网络上是明文传输的,想要安全传输就得加密,也就是HTTPS。
