目录
[HTTP 和 HTTPS 五大核心区别(精简版)](#HTTP 和 HTTPS 五大核心区别(精简版))
[1、传输内容:明文 VS 密文(最核心)](#1、传输内容:明文 VS 密文(最核心))
[3、安全机制:无校验 VS CA 证书校验](#3、安全机制:无校验 VS CA 证书校验)
[补充高频考点:HTTPS 的 GET 参数会不会泄密?](#补充高频考点:HTTPS 的 GET 参数会不会泄密?)
[为什么敏感数据不能用 GET?](#为什么敏感数据不能用 GET?)
[GET 数据会暴露在:](#GET 数据会暴露在:)
[正确做法:用 POST(数据放在请求体,不在 URL)](#正确做法:用 POST(数据放在请求体,不在 URL))
[1. ❌ 错误写法(GET 传密码 → 泄密)](#1. ❌ 错误写法(GET 传密码 → 泄密))
[2. ✅ 安全写法(POST JSON → 数据不在 URL)](#2. ✅ 安全写法(POST JSON → 数据不在 URL))
[3. ✅ 安全写法(POST 表单)](#3. ✅ 安全写法(POST 表单))
[4. 最关键区别(一张图看懂)](#4. 最关键区别(一张图看懂))
[❌ GET(不安全)](#❌ GET(不安全))
[✅ POST(安全)](#✅ POST(安全))
[5. 总结(必须记住)](#5. 总结(必须记住))
[敏感数据永远用 POST:](#敏感数据永远用 POST:)
[GET 只能传什么?](#GET 只能传什么?)
[6. 给你一句最安全的开发原则](#6. 给你一句最安全的开发原则)
[敏感数据绝不放 URL,一律放 POST 请求体!](#敏感数据绝不放 URL,一律放 POST 请求体!)
HTTP 和 HTTPS 五大核心区别(精简版)
1、传输内容:明文 VS 密文(最核心)
-
HTTP :整段报文(URL、GET 参数、Header、POST 数据、Cookie)全明文,无线网抓包直接看见账号密码。
-
HTTPS :TLS 隧道加密,HTTP 报文整体被打包加密,链路抓包只有乱码,中间人看不到接口参数与隐私数据。
HTTP:
URL、参数、Cookie、内容 全部在网络上裸奔抓包软件直接看到:
plaintext
GET /login?user=zhangsan&pwd=123456 HTTP/1.1→ 完全泄密
HTTPS:
整个 HTTP 请求(包括 URL、Header、Body)全部被 TLS 加密抓包只能看到:
plaintext
TLS 加密数据包(一堆乱码)→ 黑客看不到任何真实内容
2、端口不同
- HTTP:默认 80 端口
- HTTPS:默认 443 端口
3、安全机制:无校验 VS CA 证书校验
- HTTP:没有身份认证,中间人可以伪造服务器、篡改返回数据(挂广告、替换下载链接)。
- HTTPS:第三方 CA 颁发合法证书,握手时校验服务端身份,无法轻易冒充站点,杜绝中间人劫持篡改。
4、资源开销
- HTTP:无加密运算,连接快、CPU 占用小。
- HTTPS:握手需要非对称加密 + 对称加密运算,多一次 TLS 握手,少量消耗 CPU,现在硬件性能下体感差距极小。
5、数据泄露风险
- HTTP:GET 拼接密码、表单密码、Cookie 全裸奔,公共 WiFi 高危泄密。
- HTTPS:
- 传输链路不泄露;
- 可配置 Cookie 的
Secure属性,仅 HTTPS 环境携带 Cookie,防止会话窃取;
补充:HTTPS 仅域名会暴露在 DNS 解析 (运营商知道你访问哪个域名),路径、参数全程加密。
补充高频考点:HTTPS 的 GET 参数会不会泄密?
- 网络链路:不会泄密(加密传输);
- 本地浏览器、服务器日志:会明文留存 URL 参数 ,敏感账号密码不要放在 GET 拼接,改用 POST。
一句话总结
HTTP 裸奔传输,可读可改;HTTPS 加密 + 证书,防窃听防篡改。
为什么敏感数据不能用 GET?
GET 数据会暴露在:
- 浏览器地址栏
- 浏览器历史记录
- 服务器日志(Apache/Nginx/Java/Python 后台日志)
- 运营商日志
- 代理服务器日志
全是明文!永远删不掉!
所以:账号、密码、身份证、验证码、Token 绝对不能放 GET!
正确做法:用 POST(数据放在请求体,不在 URL)
我给你 Qt 实战代码 + 对比,一看就懂!
1. ❌ 错误写法(GET 传密码 → 泄密)
cpp
运行
// 危险!密码直接拼在 URL 里!
QString url = "http://xxx.com/login?username=zhangsan&password=123456";
http->get(url);
后果:
日志里永久留下:
plaintext
/login?username=zhangsan&password=123456
谁都能看到!
2. ✅ 安全写法(POST JSON → 数据不在 URL)
cpp
运行
QString url = "https://xxx.com/login"; // 无参数
QJsonObject obj;
obj.insert("username", "zhangsan");
obj.insert("password", "123456"); // 敏感数据放请求体里
http->postJson(url, obj); // POST 提交
优点:
- URL 干净:
/login - 数据不会出现在地址栏
- 数据不会出现在浏览器历史
- 服务器日志不会记录密码
- HTTPS 加密后更安全
3. ✅ 安全写法(POST 表单)
cpp
运行
QString url = "https://xxx.com/login";
QByteArray data = "username=zhangsan&password=123456";
http->postForm(url, data);
同样安全!
4. 最关键区别(一张图看懂)
❌ GET(不安全)
plaintext
URL: /login?user=xxx&pwd=xxx
日志、历史、地址栏 → 全看见
✅ POST(安全)
plaintext
URL: /login
数据:{ "user":"xxx", "pwd":"xxx" }
URL 干净 → 日志不记录隐私数据
5. 总结(必须记住)
敏感数据永远用 POST:
- 登录
- 注册
- 密码修改
- 身份证
- 手机号
- 验证码
- Token
GET 只能传什么?
- 搜索关键词
- 分页页码
- 分类 ID
- 不敏感的筛选参数