HTTP & HTTPS 详解

前言

HTTP 是互联网的基石,但它存在天生的安全缺陷。HTTPS 在 HTTP 之上加了一层 TLS 加密,解决了安全问题,但也带来了性能开销。

本文从0到1,彻底讲清楚:

  • HTTP 是什么、怎么工作、各版本演进

  • HTTPS 的密码学基础(对称/非对称/哈希/证书)

  • HTTPS 完整握手流程(6阶段图解)

  • HTTP/1.0 → 1.1 → 2.0 → 3.0 核心变化对比

无论你是前端、后端、还是运维,这些知识都是面试常客,也是理解网络通信的必备功底。


一、HTTP 基础详解

1.1 HTTP 是什么

HTTP(HyperText Transfer Protocol,超文本传输协议) ,应用层协议,是浏览器和服务器之间明文传输数据的基础规则。

核心特点(必记):

  • 无状态 :服务器不记录客户端任何信息,每次请求独立

  • 无连接 :默认一次请求响应后断开 TCP 连接(1.0),1.1 后支持长连接

  • 明文:数据以文本格式传输,不加密

默认端口:80

作用:传输网页、图片、接口数据等超文本内容。

1.2 HTTP 核心工作流程

一次完整的 HTTP 请求分为 6 步:

复制代码
客户端(浏览器)→ 建立 TCP 连接(三次握手)
客户端       → 发送 HTTP 请求报文(请求资源)
服务器       → 解析请求、处理业务、查询数据
服务器       → 返回 HTTP 响应报文(返回结果)
客户端       → 解析响应、渲染页面 / 处理数据
断开 TCP 连接(HTTP 1.0 默认)

1.3 HTTP 报文结构

请求报文(客户端 → 服务器)
复制代码
请求行:请求方法(GET/POST)+ 请求地址 + 协议版本
请求头:Cookie、User-Agent、Host、Accept 等(附加信息)
请求体:POST 数据、表单参数(GET 无请求体)

示例:

复制代码
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Cookie: session_id=abc123
响应报文(服务器 → 客户端)
复制代码
响应行:协议版本 + 状态码(200/404/500)+ 描述
响应头:Content-Type、Set-Cookie、Cache-Control 等
响应体:网页 HTML、JSON 数据、图片二进制流(核心数据)

示例:

复制代码
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1024
Set-Cookie: session_id=abc123; Path=/

<html>
  <body>Hello World</body>
</html>

1.4 HTTP 无状态的问题与解决方案

问题:无状态意味着服务器不记得你------登录完了下一页又要登录,购物车加了刷新一下没了。

解决方案

方案 原理 特点
Cookie + Session 服务端存 Session,客户端存 Cookie(存 Session ID) 传统方案,服务端有状态
JWT(Token) 客户端持有加密 Token,服务端无状态验证 分布式友好,无需 Session 存储
OAuth / SSO 统一认证授权,第三方登录 跨系统、跨平台

二、HTTP 版本演进对比

2.1 HTTP/1.0 vs HTTP/1.1

特性 HTTP/1.0 HTTP/1.1
连接方式 短连接,每次请求独立 TCP 长连接(Keep-Alive),复用 TCP
缓存控制 无缓存优化 引入 Cache-Control、ETag
断点续传 不支持 支持(Range 头)
Host 头 必填(虚拟主机支持)
核心问题 建连消耗大、延迟高 队头阻塞:同一 TCP 请求串行处理,前一个阻塞后一个

HTTP/1.0 的痛点:每个请求都要三次握手 + 四次挥手,页面加载 10 个资源就要建连 10 次。

HTTP/1.1 的改进 :Keep-Alive 复用 TCP 连接,但队头阻塞依然存在------同一连接上请求必须排队。

2.2 HTTP/1.1 vs HTTP/2.0

特性 HTTP/1.1 HTTP/2.0
多路复用 ❌ 串行请求,队头阻塞 ✅ 单 TCP 并行多路传输,互不干扰
数据格式 文本报文,体积大、解析慢 二进制帧,紧凑高效、解析快
头部压缩 仅 Body 压缩,Header 明文 HPACK 算法压缩 Header
服务器推送 ❌ 客户端逐个请求资源 ✅ 服务器主动推送关联资源
连接数限制 浏览器 6-8 个连接上限 单连接即可多路复用

二进制帧工作原理

复制代码
HTTP/1.1: GET /a → GET /b → GET /c(排队)
HTTP/2.0: ┌─帧1(a)─┐ ┌─帧2(b)─┐ ┌─帧3(c)─┐(并行)
          └────────┘ └────────┘ └────────┘
          同一条 TCP 连接,同时传输

HPACK 头部压缩:HTTP/1.1 的 Header 每次都是明文重复(Cookie、User-Agent 等),HTTP/2.0 用 HPACK 压缩+索引,重复字段只传索引号,Header 体积减少 80%+。

2.3 HTTP/2.0 vs HTTP/3.0

特性 HTTP/2.0 HTTP/3.0
传输协议 TCP QUIC(基于 UDP)
建连耗时 TCP 三次握手 + TLS 握手 = 2-RTT 0-RTT(重连)/ 1-RTT(新连)
头部压缩 HPACK QPACK(更高效,适配 QUIC)
队头阻塞 TCP 层存在(丢包阻塞所有请求) 彻底解决(各流独立,丢包不影响其他)
连接迁移 ❌ 依赖四元组,IP/端口变则断连 ✅ 64 位连接 ID,网络切换不断连

队头阻塞的致命差异

  • HTTP/2.0 的队头阻塞 :虽然应用层多路复用,但 TCP 本身是顺序传输的。只要丢一个包,TCP 会等待重传,阻塞整条连接上的所有请求。
  • HTTP/3.0 彻底解决:QUIC 的每个数据流独立,流 A 丢包只影响流 A,流 B/C/D 继续传输。

连接迁移 :TCP 靠 源 IP + 源端口 + 目的 IP + 目的端口 四元组标识连接,WiFi 切移动数据,IP 变了,TCP 连接立即断开。QUIC 用 64 位连接 ID,网络切换后 ID 不变,连接自动恢复------刷抖音、看视频、打语音切网络不中断的原理。


三、QUIC 底层核心

QUIC(Quick UDP Internet Connections)是 HTTP/3.0 的底层传输协议,站在 UDP 肩膀上实现 TCP 的功能,还更强:

特性 TCP QUIC(基于 UDP)
传输层 内核态,难以升级 应用层,随时迭代
握手 3 次握手 0-RTT / 1-RTT
丢包影响 阻塞整个连接 只阻塞单个流
连接迁移 四元组,断了重建 连接 ID,无缝切换
加密 依赖 TLS 层 内建 TLS,天然加密
拥塞控制 内核实现,难以定制 应用层,可自定义策略

一句话总结 QUIC:UDP 做底层,应用层自己实现流量控制、拥塞控制、重传机制,集成 TLS 天然加密,每个数据流独立不相互阻塞。


四、HTTPS 密码学基础(核心底层)

HTTPS 的安全建立在密码学四大基石上。不理解这块,HTTPS 握手流程看了也是白看。

4.1 对称加密

项目 说明
定义 加密和解密用同一把密钥
特点 ⚡ 速度极快、计算简单
缺点 密钥传输不安全(中途可能被截获)
用途 大数据加密(通信主体)
例子 AES(HTTPS 主流)、DES、3DES

问题:既然对称加密快,为什么不用它直接加密所有数据?------密钥怎么安全地传给对方?

4.2 非对称加密

项目 说明
定义 一对密钥:公钥(Public Key)+ 私钥(Private Key)
规则 公钥加密 → 私钥解密;私钥加密 → 公钥解密
特点 🔒 安全,但速度慢、计算复杂
用途 加密小数据(密钥、签名)
例子 RSA(HTTPS 主流)、ECC

公私钥的唯一性原则

  • 公钥:公开给全世界,谁都可以拿

  • 私钥:只有自己保管,绝不泄露

4.3 哈希算法

项目 说明
定义 任意长度数据 → 固定长度摘要
核心特性 ① 不可逆(摘要推不出原文)② 数据改 1 位,摘要全变
用途 校验数据完整性、数字签名
例子 SHA-256、MD5(已淘汰)

哈希算法不加密,它做的是指纹校验------确保数据在传输中没有被篡改。

4.4 数字证书

核心问题:非对称加密里,你拿到的公钥怎么确定是服务器本人的,而不是中间人伪造的?

答案就是数字证书

项目 说明
颁发者 CA(Certificate Authority,权威机构)
内容 绑定服务器域名 + 服务器公钥 + CA 签名
作用 证明公钥是真实服务器的,不是黑客伪造的
验证 客户端校验证书域名、有效期、CA 签名(防篡改)

一句话:数字证书就是服务器的"身份证",CA 就是"公安局"。

CA 证书防篡改的核心:浏览器 / 操作系统里「预装了 CA 根证书的公钥」,用它验签名、确认证书没被改、没被伪造。


五、HTTPS 本质

复制代码
HTTPS = HTTP + TLS(旧称SSL,已淘汰)
HTTP  = 明文传输,易被窃听、篡改、劫持
HTTPS = HTTP数据经TLS加密传输,端口443(HTTP是80)

核心矛盾解决

  • 对称加密: 但密钥传输不安全

  • 非对称加密:安全 但太慢

  • HTTPS 组合拳:非对称加密传密钥,对称加密传数据


六、HTTPS 完整加密流程(6 阶段详解)

这是面试高频考点,也是理解 HTTPS 最关键的部分。

阶段 1:客户端发起 TLS 握手

客户端向服务器发送:

  • 客户端随机数 (Client Random)

  • 支持的加密套件(对称 + 非对称的组合)

    Client → Server: Client Random + 支持的加密套件

阶段 2:服务器响应握手

服务器返回:

  • 服务器随机数 (Server Random)

  • 选中的加密套件

  • 服务器数字证书(含服务器公钥)

    Server → Client: Server Random + 选中加密套件 + 数字证书

阶段 3:客户端验证证书

客户端校验证书 3 个关键点

  1. 是否过期 → 证书有有效期
  2. 域名是否匹配 → 和访问的域名一致
  3. CA 签名是否合法 → 防伪造

✅ 验证通过:信任服务器公钥,继续握手

❌ 验证失败:直接断开连接,浏览器显示"不安全"

复制代码
Client: 验证证书 → 通过则信任公钥

阶段 4:密钥交换(非对称加密上场)

复制代码
Client: 生成预主密钥(Pre-Master Key)
        用服务器公钥 + 非对称加密 → 加密预主密钥
        发送给服务器
Server: 用自己的私钥解密 → 拿到预主密钥

关键点:预主密钥全程用公钥加密传输,黑客截获了没有私钥也解不开。

阶段 5:生成会话密钥

客户端和服务器各自独立计算,用相同的三个数据:

复制代码
会话密钥 = 算法(Client Random + Server Random + Pre-Master Key)

双方计算出的会话密钥完全一致 ,而且这个密钥从未在网络中传输过------黑客无从得知。

复制代码
Client: 计算 → 会话密钥 A
Server: 计算 → 会话密钥 A(完全相同)

阶段 6:加密通信

双方用会话密钥 + 对称加密(AES) 传输 HTTP 数据。

复制代码
Client ↔ Server: HTTP数据(AES加密传输)

为什么这里用对称加密?------速度快!大数据传输用非对称加密太慢。

完整的 HTTPS 握手图解

复制代码
客户端                             服务器
  │                                  │
  │  ① Client Random + 加密套件       │
  │ ──────────────────────────────►  │
  │                                  │
  │  ② Server Random + 证书 + 加密套件│
  │ ◄──────────────────────────────  │
  │                                  │
  │  ③ 验证证书(域名/有效期/CA签名) │
  │                                  │
  │  ④ 生成预主密钥, 用公钥加密       │
  │ ──────────────────────────────►  │
  │                                  │
  │  ⑤ 各自计算会话密钥              │
  │     3 个输入:                   │
  │     Client Random               │
  │     Server Random               │
  │     Pre-Master Key              │
  │                                  │
  │  ⑥ 会话密钥 + AES 加密通信       │
  │ ◄════════════════════════════►  │
  │    HTTP 数据(加密传输)           │

SSL/TLS握手就那么一次,后续通信全走对称加密,又快又安全。


七、总结对比表

HTTP 各版本一句话总结

版本 核心特点 最大缺陷
HTTP/1.0 短连接,请求完就断 建连成本高
HTTP/1.1 长连接 Keep-Alive 队头阻塞
HTTP/2.0 多路复用 + 二进制帧 + HPACK 压缩 TCP 层丢包仍阻塞
HTTP/3.0 QUIC (UDP) + 0-RTT + 连接迁移 部署成本高

HTTPS 密码学一句话总结

技术 一句话
对称加密 快但密钥怕截获
非对称加密 安全但速度慢
哈希算法 不可逆,做数据完整性校验
数字证书 服务器的"身份证",防中间人攻击
HTTPS 非对称加密传密钥 + 对称加密传数据 = 又快又安全
相关推荐
lularible2 小时前
PTP协议精讲(4.2):消息结构与编码——PTP报文的“DNA“
网络·网络协议·开源·嵌入式·ptp
2501_915909062 小时前
完整指南:如何将iOS应用上架到App Store
android·ios·小程序·https·uni-app·iphone·webview
发光小北10 小时前
Profinet 从站转 EtherNet/IP 从站网关如何应用?
网络·网络协议·tcp/ip
wangl_9210 小时前
Modbus RTU 与 Modbus TCP 深入指南-Wireshark抓包分析实战
网络协议·tcp/ip·wireshark·tcp·modbus·rtu
源远流长jerry12 小时前
Linux 网络发送机制深度解析:从应用到网线
linux·服务器·网络·网络协议·tcp/ip
handler0113 小时前
UDP协议与网络通信知识点
c语言·网络·c++·笔记·网络协议·udp
cen__y14 小时前
Linux11(网络编程)
linux·运维·服务器·c语言·网络·网络协议·tcp/ip
小新同学^O^14 小时前
简单学习 --> WebSocket
java·websocket·网络协议·学习
冰冰的米咖15 小时前
20260430am9_10
网络·网络协议