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 请求体!

相关推荐
GottdesKrieges1 小时前
OceanBase迁移用户及其权限配置
数据库·oceanbase
OceanBase数据库官方博客2 小时前
新版本 OceanBase seekdb 1.3.0:22倍性能增益,P99抖动小于1.1倍
数据库·oceanbase
倒流时光三十年2 小时前
PostgreSQL ON CONFLICT DO UPDATE 增加 WHERE 条件优化性能
数据库·postgresql
暴力求解2 小时前
MySQL---表的操作
数据库·mysql
IvorySQL2 小时前
PostgreSQL 技术日报 (6月1日)|逻辑复制问题修复,AI 行业动态速览
数据库·人工智能·postgresql
Database_Cool_2 小时前
从 MySQL 迁移到阿里云 AnalyticDB MySQL:零改造百倍加速实战教程
数据库·mysql·阿里云
2501_915909062 小时前
深入解析Mock.js:功能、应用及实战案例,提升前端开发效率
android·ios·小程序·https·uni-app·iphone·webview
闪电悠米3 小时前
黑马点评-秒杀优化-01_async_seckill_idea
java·数据库·ide·redis·分布式·缓存·intellij-idea
TDengine (老段)3 小时前
TDengine 数据修复与迁移 — VGroup 调度、S3 外挂与运维操作
大数据·运维·数据库·物联网·时序数据库·iot·tdengine