HTTP 和 HTTPS 五大核心区别

目录

[HTTP 和 HTTPS 五大核心区别(精简版)](#HTTP 和 HTTPS 五大核心区别(精简版))

[1、传输内容:明文 VS 密文(最核心)](#1、传输内容:明文 VS 密文(最核心))

HTTP:

HTTPS:

2、端口不同

[3、安全机制:无校验 VS CA 证书校验](#3、安全机制:无校验 VS CA 证书校验)

4、资源开销

5、数据泄露风险

[补充高频考点: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:
    1. 传输链路不泄露;
    2. 可配置 Cookie 的Secure属性,仅 HTTPS 环境携带 Cookie,防止会话窃取;

补充:HTTPS 仅域名会暴露在 DNS 解析 (运营商知道你访问哪个域名),路径、参数全程加密

补充高频考点:HTTPS 的 GET 参数会不会泄密?

  1. 网络链路:不会泄密(加密传输)
  2. 本地浏览器、服务器日志:会明文留存 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
  • 不敏感的筛选参数

6. 给你一句最安全的开发原则

敏感数据绝不放 URL,一律放 POST 请求体!

相关推荐
IvorySQL5 小时前
PostgreSQL 日报 | JOIN 与外键优化(8 月 9 日)
数据库·postgresql
ltl5 小时前
自治数据库十年回顾:Peloton、NoisePage、OtterTune 到云原生 auto-tuning
数据库
灯澜忆梦7 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
C++ 老炮儿的技术栈8 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
MC皮蛋侠客8 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
zt1985q10 小时前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
IvorySQL11 小时前
PostgreSQL 日报| PostgreSQL 19 默认 WAL 压缩算法(8 月 8 日)
数据库·postgresql·区块链
油丶酸萝卜别吃11 小时前
MySQL B+ 树查询全过程详解
数据库·mysql
leisoo809711 小时前
股票数据本地化存储实战:JSON、数据库与列式存储的方案对比
jvm·数据库·json
Exclusive_Cat11 小时前
MySQL回表机制解析与优化策略
数据库·sql