GET 和 POST 的本质区别在于 语义规范:
GET 用于获取资源(如加载网页、查询数据),参数暴露在URL中,有长度限制且可被缓存,适合安全幂等操作,
安全是指请求不会破坏服务端上面的资源,get是只读的,无论操作多少次,服务器上的数据都是安全的。幂等是指多次执行相同的操作,结果都是相同的。get每次获取的资源都是相同的是幂等,而且可以做数据缓存;
POST 用于提交资源(如提交表单、上传文件),数据通过请求体body传输,支持更大数据和多种编码类型(如JSON/二进制),由于post操作会修改服务器资源,不安全不缓存且非幂等。
安全性上两者均非绝对安全(明文传输需HTTPS加密),实际开发中应根据场景需求(数据敏感性、操作性质)而非安全性选择方法。
一、最本质区别(必答)
| GET(查快递) | POST(寄快递) | |
|---|---|---|
| 语义 | 获取资源(拉取数据) | 提交资源(推送数据) |
| 类比 | 向快递柜查询包裹是否存在 | 给快递公司寄出一个新包裹 |
二、核心差异详解(7大要点)
1. 参数位置
# GET请求 → 参数在URL中(明文可见)
GET /search?q=iphone HTTP/1.1
Host: www.example.com
# POST请求 → 参数在请求体中(可隐藏)
POST /order HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
item=iphone&quantity=1
2. 数据长度
- GET:URL长度限制(Chrome 8KB/Safari 64KB)
- POST:理论上无限制(实际受服务器配置限制)
3. 安全性
- GET:参数暴露在地址栏/历史记录(⚠️ 禁止传密码)
- POST:数据在请求体,但仍需HTTPS加密(🚫 非绝对安全)
4. 幂等性
- GET:幂等(多次查询相同结果)
- POST:非幂等(多次提交可能创建多个订单)
5. 缓存机制
- GET:可被浏览器主动缓存(📦 自动保存查询结果)
- POST:默认不缓存(除非手动设置Cache-Control)
6. 编码类型
- GET:仅支持URL编码(application/x-www-form-urlencoded)
- POST:支持多种编码(JSON/二进制文件上传等)
7. 书签收藏
- GET:可保存为书签(含完整参数)
- POST:无法直接保存(刷新可能导致重复提交)
三、高频考点总结(面试金句)
-
根本区别
"GET用于获取资源(如搜索商品),POST用于提交资源(如下单支付),这是RFC规范定义的语义差异" -
安全误区
"虽然POST参数不在URL显示,但抓包工具仍可看到明文数据,真正的安全性需要HTTPS保障" -
使用场景
- GET:商品列表筛选、详情页跳转(参数简单)
- POST:用户登录、文件上传、表单提交(数据量大/敏感)
四、记忆技巧(快递员故事)
- GET快递员:只负责带个空包取件(参数写在取件单上)
- POST快递员:需要背个大包送货(货物装在包裹内部)
掌握这7大对比维度,遇到追问还能举例说明(如浏览器缓存机制、RESTful API设计原则),轻松展现你的HTTP功底! 🚀