HTTP 和 HTTPS 有什么区别?
- 标签:网络
🏛 业务架构师
区别一句话:HTTPS = HTTP + TLS(在传输层与应用层之间加密),用非对称交换密钥、对称加密内容、证书防中间人。
业务视角,HTTPS 是信任成本,不是可选项:
- 合规红线:支付页面(PCI-DSS)、个人信息传输(个保法语境下的安全义务)强制加密——不做是法律风险,不是体验问题;
- 转化率:浏览器对 HTTP 站标"不安全",用户在登录/支付页流失——Google 还把 HTTPS 作为搜索排名因子,流量与信任双输;
- 防篡改:运营商/公共 WiFi HTTP 劫持插广告是真实痛点——HTTPS 保证内容完整,品牌体验的技术防线;
- 新协议的前提:HTTP/2、HTTP/3 的主流落地都以 TLS 为前提——不升 HTTPS 等于放弃协议红利。
成本与化解:加解密与握手有 CPU 和延迟开销,但现代方案已摊薄——TLS 1.3 握手 1-RTT/0-RTT、会话复用、硬件加速。证书费用趋近于零(Let's Encrypt 免费证书 + 自动续期),剩下的是运维纪律:证书到期监控 + 自动续期——"证书过期导致全站瘫痪"至今仍是高频事故,我要求证书到期 30 天告警、7 天强制处理。
架构落地:全站 HTTPS + TLS 终止在网关/CDN(证书集中管理、内部服务间可按需选择 mTLS 或内网信任),HSTS 头防降级劫持。
一句话:HTTPS 的 ROI 在合规、信任、流量三端都是正的——它不是要不要做的技术题,是怎么管好的运维题。
🏗 系统架构师
核心差异:HTTP 明文,HTTPS = HTTP + TLS 加密层。我按 TLS 解决的三件事讲:
- 机密性:明文 HTTP 在链路任意节点(路由器、运营商、代理)可被窃听——HTTPS 用对称加密加密内容(AES/ChaCha20),密钥通过非对称(RSA/ECDHE)协商。ECDHE 还提供前向安全:会话密钥不落盘,私钥泄露也解不开历史流量;
- 完整性:防篡改(运营商插广告、劫持跳转)——AEAD(如 AES-GCM)带校验;
- 身份认证:CA 签发的证书链防止中间人伪装服务器——客户端验证证书签名、域名、有效期、吊销状态。
连接建立差异:HTTPS 在 TCP 握手后多了 TLS 握手(TLS 1.2 约 2-RTT,1.3 降到 1-RTT/0-RTT),证书验证与密钥交换后进入加密 HTTP 通信;默认端口 443 vs 80。
工程要点:
- 性能:握手开销靠 会话复用(session ticket)与 keep-alive 摊薄;TLS 1.3 + ECC 证书显著提速;
- 成本:证书免费化(Let's Encrypt/云厂商)后没有借口不上 HTTPS;HTTP/2/3 基本强制 TLS;
- 细节:开启 HSTS 强制跳转、证书到期监控(证书过期是高频事故)、SNI 支持单 IP 多域名、后端卸载架构(SLB/Nginx 做 TLS 终止,内网明文省 CPU)。
💻 全栈开发专家
一句话:HTTP 明文裸奔,HTTPS = HTTP + TLS(加密 + 完整性 + 身份认证)。
| 维度 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 传输 | 明文(抓包直接看) | 对称加密密文 |
| 身份 | 无 | CA 证书链验证服务器身份(防钓鱼/中间人) |
| 完整性 | 无保证 | MAC/AEAD 防篡改 |
| 性能 | 快 | TLS 握手 1~2 RTT + 加解密开销(现代 CPU + 会话复用后很小) |
握手要点(TLS 1.3):客户端随机数+密钥套件 → 服务端证书 + 临时公钥(ECDHE)→ 双方用非协商出对称密钥,之后对称加密(AES-GCM/ChaCha20)——非对称换密钥,对称传数据。
我的部署实操:
bash
# 免费证书 + 自动续期(Let's Encrypt)
certbot --nginx -d example.com # 签发 + 配置 + 自动续期一条龙踩过的坑:
- 证书链不全:只配了叶子证书漏中间证书,浏览器正常(有缓存)、但 Java 客户端/curl 报 unknown_ca——必须 fullchain;
- HTTP/2 的浏览器实现要求 TLS(NPN/ALPN),想上 h2 先有 HTTPS;
- 混合内容:HTTPS 页面里调 HTTP 接口会被浏览器拦,前端资源必须全 https;
- 证书到期监控 + 自动续期,忘记续期是大事故。
加分点:提 TLS1.3 的 0-RTT 和前向保密(ECDHE,私钥泄露不影响历史流量)。