HTTP 和 HTTPS 的区别?

2025年 阅读约 12 分钟 面试指南 · 计算机网络

深入解析HTTP与HTTPS:SSL/TLS握手过程、对称加密与非对称加密、数字证书与CA、HTTP/1.1与HTTP/2对比、HTTPS性能优化,附面试模拟问答。

一句话总结

HTTP 是明文传输,HTTPS = HTTP + SSL/TLS,通过加密保证安全。核心区别:端口(80 vs 443)、加密(无 vs SSL/TLS)、证书(不需要 vs 需要 CA 证书)。HTTPS 握手过程:Client Hello → Server Hello + 证书 → 密钥交换 → 对称加密通信。混合加密:非对称加密(RSA/ECDHE)交换密钥,对称加密(AES)传输数据。HTTP/2 核心改进:多路复用、头部压缩、服务器推送、二进制分帧

初级理解

HTTP vs HTTPS 对比

对比维度HTTPHTTPS
端口80443
安全性明文传输,易被窃听篡改SSL/TLS 加密,安全
证书不需要需要 CA 颁发的证书
连接简单,TCP 三次握手后通信TCP 握手后还需 SSL/TLS 握手
SEOGoogle 降低排名Google 优先收录
速度快(无加密开销)略慢(加密解密 + 握手)

HTTPS 加密原理

# HTTPS 使用混合加密: # 1. 非对称加密(公钥+私钥):用于握手阶段交换"会话密钥" # 2. 对称加密(同一个密钥):用于数据传输 # 为什么混合? # 非对称加密:安全但慢(RSA 2048位) # 对称加密:快但需要安全交换密钥(AES 256位) # 结合:用非对称加密安全交换对称密钥,用对称加密高效传输数据 # 简化流程: # 1. 客户端 → 服务端:Client Hello(支持的加密套件) # 2. 服务端 → 客户端:Server Hello + 证书(含公钥) # 3. 客户端验证证书 → 生成随机密钥 → 用公钥加密 → 发给服务端 # 4. 服务端用私钥解密 → 得到对称密钥 # 5. 双方用对称密钥加密通信

中级深入

SSL/TLS 握手详细过程

# TLS 1.2 握手(RSA 密钥交换): # 1. Client Hello # 客户端 → 服务端:支持的 TLS 版本、加密套件、随机数1 # 2. Server Hello # 服务端 → 客户端:选定的 TLS 版本、加密套件、随机数2 # 3. Certificate # 服务端 → 客户端:证书(含公钥) # 4. Server Hello Done # 服务端 → 客户端:握手消息结束 # 5. Client Key Exchange # 客户端:生成随机数3(Pre-Master Secret) # → 用证书公钥加密 → 发给服务端 # → 双方用随机数1+2+3生成会话密钥(Master Secret) # 6. Change Cipher Spec # 客户端 → 服务端:通知后续用会话密钥加密 # 7. Finished(加密) # 客户端 → 服务端:握手完成验证 # 8. Change Cipher Spec + Finished # 服务端 → 客户端:同样通知并验证 # TLS 1.3 改进(更快更安全): # 1. 握手减为 1-RTT(TLS 1.2 需要 2-RTT) # 2. 移除不安全算法(RSA 密钥交换、CBC 模式) # 3. 只支持前向安全的 ECDHE 密钥交换 # 4. 0-RTT 模式(重连时更快)

数字证书与 CA

# 证书的作用:证明"公钥确实属于这个网站" # 证书内容: # 1. 网站域名 # 2. 网站公钥 # 3. 证书有效期 # 4. 颁发机构(CA)信息 # 5. CA 的数字签名 # 验证链(证书链): # 网站证书 → 中间 CA 证书 → 根 CA 证书(浏览器内置) # 逐级验证签名,直到根证书 # 中间人攻击(MITM): # 攻击者在客户端和服务端之间拦截通信 # HTTPS 通过证书验证防止 MITM: # 攻击者无法伪造 CA 签名的证书 # 浏览器会提示"证书不受信任"

高级进阶

HTTP/1.1 vs HTTP/2 vs HTTP/3

特性HTTP/1.1HTTP/2HTTP/3
传输层TCPTCPQUIC(UDP)
多路复用不支持(队头阻塞)支持(流复用)支持(无队头阻塞)
头部压缩不支持HPACKQPACK
服务器推送不支持支持支持
连接建立TCP 1-RTT + TLS 1-RTTTCP 1-RTT + TLS 1-RTT0-RTT(重连)

HTTPS 性能优化

# 1. Session 复用(Session ID / Session Ticket) # 首次握手后缓存会话密钥,下次连接跳过密钥交换 # 减少 1-RTT # 2. OCSP Stapling(证书状态在线查询) # 服务端预先获取 OCSP 响应,握手时一起发给客户端 # 客户端无需单独查询 CA,减少延迟 # 3. False Start(抢先开始) # 客户端在收到 Finished 之前就开始发送应用数据 # 减少 1-RTT # 4. HSTS(HTTP Strict Transport Security) # 强制浏览器使用 HTTPS,避免 301 重定向 # Strict-Transport-Security: max-age=31536000 # 5. TLS 1.3(更快握手) # 1-RTT 握手(TLS 1.2 需要 2-RTT) # 0-RTT 重连(PSK 模式) # 6. ECDHE 密钥交换(前向安全) # 每次会话生成新密钥,即使私钥泄露也不影响历史会话

实战场景

# 场景1:Nginx 配置 HTTPS server { listen 443 ssl http2; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # 只使用安全的加密套件 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:...; ssl_protocols TLSv1.2 TLSv1.3; # 启用 HSTS add_header Strict-Transport-Security "max-age=63072000" always; } # 场景2:HTTP 强制跳转 HTTPS server { listen 80; server_name example.com; return 301 https://$host$request_uri; } # 场景3:查看网站证书信息 openssl s_client -connect example.com:443 -servername example.com

面试模拟

面试官:HTTP 和 HTTPS 的区别?HTTPS 如何保证安全?

你:HTTP 明文传输,HTTPS 通过 SSL/TLS 加密。HTTPS 安全机制:1)混合加密(非对称加密交换密钥,对称加密传输数据);2)数字证书验证身份(防止中间人攻击);3)消息认证码(MAC)保证数据完整性。端口 80 vs 443。

面试官:HTTP/2 相比 HTTP/1.1 有哪些改进?

你:四大改进:1)多路复用(一个 TCP 连接并发多个请求,解决队头阻塞);2)头部压缩(HPACK 算法,减少重复头部传输);3)服务器推送(主动推送资源,如 CSS/JS);4)二进制分帧(二进制格式替代文本,解析更高效)。