This site is no longer maintained. Please visit zdecode.vercel.app
ZDecode
网络 & HTTP

HTTP 面试题

前端面试 HTTP 高频考点

HTTP 和 HTTPS 的区别

HTTP 是明文传纸条,路过的人都能看、能改、能冒充。HTTPS 是把纸条锁进保险箱,只有收件人能打开。

四大区别

1)安全性(最本质)

HTTPHTTPS
传输方式明文加密(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 HelloC → S支持的加密套件 + 随机数 A
Server HelloS → C选定加密套件 + 随机数 B + 证书(含公钥)+ ECDHE 参数(椭圆曲线公钥,带签名)
Client Key ExchangeC → S验证证书 → 发送客户端 ECDHE 公钥 → 双方算出会话密钥 → Change Cipher Spec
Server FinishedS → CChange Cipher Spec + 握手摘要验证

双方凑齐随机数 A + 随机数 B + ECDHE 共享密钥,算出相同会话密钥,后续对称加密通信。

RSA 握手(旧,TLS 1.2)

核心区别在第三步:客户端生成 Pre-master Secret,用服务端证书公钥加密后发送,服务端用私钥解密。双方凑齐三个随机数生成会话密钥。

致命缺陷:私钥一旦泄露,所有历史流量都可被解密(无前向安全性)。


ECDHE vs RSA

ECDHERSA
前向安全性✅ 有(每次握手临时生成密钥对)❌ 无(私钥泄露 = 历史全部解密)
计算复杂度较高(椭圆曲线运算)较低
当前地位主流首选已被 TLS 1.3 移除

SSL/TLS 演进

版本年份要点
SSL 2.01995首个公开发布版,安全问题多
SSL 3.01996引入消息完整性校验,后被 POODLE 攻击淘汰
TLS 1.01999SSL 3.0 演进版
TLS 1.22008支持 AES-GCM、SHA-256
TLS 1.32018简化握手、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 签发。