网络 & HTTP
HTTP 面试题
前端面试 HTTP 高频考点
HTTP 和 HTTPS 的区别
HTTP 是明文传纸条,路过的人都能看、能改、能冒充。HTTPS 是把纸条锁进保险箱,只有收件人能打开。
四大区别
1)安全性(最本质)
| HTTP | HTTPS | |
|---|---|---|
| 传输方式 | 明文 | 加密(SSL/TLS) |
| 窃听风险 | 有(账号密码裸奔) | 无(加密) |
| 篡改风险 | 有(被植入广告) | 无(完整性校验) |
| 冒充风险 | 有(钓鱼网站) | 无(数字证书验证身份) |
HTTPS 在 HTTP 下层加了 SSL/TLS 协议:加密防窃听、校验防篡改、数字证书防冒充。
2)性能
- HTTP:三次握手完直接发数据,快。
- HTTPS:TCP 握手后还要一次 TLS 握手(TLS 1.2 需要 2-RTT),外加加解密计算消耗 CPU。
加分项:HTTP/2 多路复用 + TLS 1.3 握手仅需 1-RTT(甚至 0-RTT),性能差距在现代网络几乎可忽略。
3)端口
- HTTP 默认 80
- HTTPS 默认 443
4)SEO 与用户体验
- 搜索引擎优先收录 HTTPS 网站
- Chrome 等浏览器对 HTTP 网站标红提示「不安全」
扩展:TLS 握手流程
HTTPS 握手本质是客户端和服务端在不安全网络里协商出一个会话密钥。
ECDHE 握手(主流,TLS 1.2)
| 步骤 | 方向 | 内容 |
|---|---|---|
| Client Hello | C → S | 支持的加密套件 + 随机数 A |
| Server Hello | S → C | 选定加密套件 + 随机数 B + 证书(含公钥)+ ECDHE 参数(椭圆曲线公钥,带签名) |
| Client Key Exchange | C → S | 验证证书 → 发送客户端 ECDHE 公钥 → 双方算出会话密钥 → Change Cipher Spec |
| Server Finished | S → C | Change Cipher Spec + 握手摘要验证 |
双方凑齐随机数 A + 随机数 B + ECDHE 共享密钥,算出相同会话密钥,后续对称加密通信。
RSA 握手(旧,TLS 1.2)
核心区别在第三步:客户端生成 Pre-master Secret,用服务端证书公钥加密后发送,服务端用私钥解密。双方凑齐三个随机数生成会话密钥。
致命缺陷:私钥一旦泄露,所有历史流量都可被解密(无前向安全性)。
ECDHE vs RSA
| ECDHE | RSA | |
|---|---|---|
| 前向安全性 | ✅ 有(每次握手临时生成密钥对) | ❌ 无(私钥泄露 = 历史全部解密) |
| 计算复杂度 | 较高(椭圆曲线运算) | 较低 |
| 当前地位 | 主流首选 | 已被 TLS 1.3 移除 |
SSL/TLS 演进
| 版本 | 年份 | 要点 |
|---|---|---|
| SSL 2.0 | 1995 | 首个公开发布版,安全问题多 |
| SSL 3.0 | 1996 | 引入消息完整性校验,后被 POODLE 攻击淘汰 |
| TLS 1.0 | 1999 | SSL 3.0 演进版 |
| TLS 1.2 | 2008 | 支持 AES-GCM、SHA-256 |
| TLS 1.3 | 2018 | 简化握手、0-RTT、移除 RSA 密钥交换 |
面试官追问
Q1:HTTPS 能防中间人攻击吗?
能,前提是证书验证没被绕过。客户端会验证证书是否由受信任 CA 签发、域名是否匹配、是否过期。但如果你手动信任了中间人根证书(比如公司内网代理),HTTPS 也挡不住。
Q2:为什么 TLS 1.3 要移除 RSA?
RSA 不具备前向安全性。攻击者录制流量 → 等待私钥泄露 → 解密所有历史通信。ECDHE 每次握手临时生成密钥,私钥泄露只影响当前会话。
Q3:0-RTT 有什么风险?
重放攻击。0-RTT 数据用上次会话密钥加密,攻击者可原样重放。若请求非幂等(转账、下单),后果严重。所以 TLS 1.3 规定 0-RTT 仅用于幂等请求。
Q4:自签名证书和 CA 证书的区别?
技术上没区别,都是公钥+签名。区别在信任链:CA 证书的根证书预装在系统里,能一路验证上去;自签名证书没人背书,浏览器弹警告。内网可用自签名(手动装根证书),对外必须用 CA 签发。