一句话总结:
GET 像明信片,内容谁都能看;POST 像信封,内容藏里面,但别以为绝对安全——快递员(网络)还是能拆开!
一、核心区别表
| 区别点 | GET | POST |
|---|---|---|
| 数据位置 | URL 参数(?name=张三) | 请求体(body)内藏 |
| 安全性 | 明文暴露,别传密码! | 相对隐蔽,但未加密仍可能泄露 |
| 数据长度 | 受 URL 长度限制(约2048字符) | 理论上无限制 |
| 缓存 | 会被浏览器缓存 | 默认不缓存 |
| 幂等性 | 幂等(多次请求结果相同) | 非幂等(可能多次提交订单) |
| 历史记录 | 保留在浏览器历史中 | 不保留 |
二、通俗比喻
1. GET:公开的快递单
-
场景:你想查快递到哪儿了,直接问快递公司:“单号123到哪了?”(参数在URL里)。
-
特点:
- 快递单贴在包裹外面,谁都能看到单号(参数暴露)。
- 查快递不影响包裹内容(只读操作)。
2. POST:封口的信封
-
场景:你要寄一封投诉信,把信纸塞进信封里(数据在body里)。
-
特点:
- 信封外面只写地址(URL),内容在内部(相对隐蔽)。
- 寄信可能触发动作(如退款、删帖)。
三、常见问题解答
1. 为什么说GET不安全?
-
URL暴露参数:浏览器历史、服务器日志、网络嗅探都可能泄露数据。
-
示例:
http://example.com/login?username=张三&password=123456 # 作大死!
2. POST真的安全吗?
- 不! 只是数据不在URL显示,但未加密(HTTP)时,抓包工具(如Wireshark)仍可截获。
- 安全建议:无论GET/POST,敏感数据必须用HTTPS加密传输。
3. 什么时候用GET?什么时候用POST?
-
用GET:
- 获取数据(如搜索、翻页)。
- 参数少且非敏感(如过滤条件
?category=books)。
-
用POST:
- 提交数据(如登录、注册、支付)。
- 参数多或含敏感信息(如上传文件、提交表单)。
4. GET能否传文件?
-
能,但别用!
-
通过URL传Base64编码的图片:
http://example.com/upload?image=Base64编码的一串乱码 -
缺点:URL长度限制、性能差、难维护。
-
四、代码示例对比
GET请求(查天气)
GET /weather?city=北京&date=2023-10-01 HTTP/1.1
Host: example.com
POST请求(登录)
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=张三&password=123456
五、高级区别(幂等性与副作用)
-
幂等性:
- GET:多次请求同一URL效果相同(如刷新页面)。
- POST:每次提交可能产生新结果(如重复提交订单)。
-
副作用:
- GET:理想情况下只读,不修改服务器数据(实际取决于后端实现)。
- POST:通常用于修改数据(如新增、更新、删除)。
总结口诀
“GET参数在地址栏,明文暴露不安全。
POST数据藏体内,上传提交更优先。
幂等缓存是GET,副作用大用POST。
敏感信息必加密,HTTPS保平安!”