← 返回文章

HTTP与HTTPS

发布于 2026/10/10

1. 完整回答

HTTP 是浏览器、移动端和服务器之间传输网页资源及接口数据的应用层协议。它通过请求方法、URL、请求头、响应状态码和响应体来组织通信,采用请求—响应模式,协议本身是无状态的。普通 HTTP 缺少传输加密和身份认证,链路上的攻击者可能读取或篡改数据。

HTTPS 在 HTTP 通信中引入 TLS,主要解决三个问题:防窃听、防篡改、验证服务器身份。以浏览器访问登录接口为例,通常先完成域名解析和 TCP 连接,然后进行 TLS 握手。客户端和服务端协商协议参数、完成临时密钥交换,服务端提供数字证书,浏览器校验证书及服务器身份。双方确认握手成功后,用协商出的对称密钥加密 HTTP 请求和响应。这里的密钥交换以现代 TLS 1.3 为例;它主要通过临时密钥协商建立会话密钥,证书中的公钥主要承担身份认证的作用。

从性能看,HTTP/1.1 支持连接复用,HTTP/2 通过多路复用和头部压缩提高传输效率,HTTP/3 则基于 UDP 上的 QUIC,进一步缓解 TCP 丢包引起的跨请求阻塞,TLS 1.3 也集成在 QUIC 的安全握手中。实际项目里,登录、支付、业务接口和静态资源都应使用 HTTPS,并配合证书维护、HSTS 和安全的 Cookie 配置。HTTPS 保护的是传输过程,服务端漏洞和恶意网页本身仍需要其他安全措施来防范。

2. 核心原理与关键概念

2.1 HTTP 的请求—响应机制

客户端发起请求 → 服务器处理 → 返回状态码、响应头和响应体 → 客户端处理结果。

例如,浏览器使用 GET 获取商品详情,服务器可能返回 200 OK 和 JSON 数据;资源不存在时通常返回 404 Not Found。请求方法表达操作意图,状态码表达处理结果,头部负责描述数据格式、缓存策略、身份凭据等信息。HTTP 本身不记录前一次请求的业务状态,登录态通常依赖 Cookie、Session 或令牌在多次请求之间关联。

2.2 HTTPS 的建立流程(以 TCP + TLS 1.3 为例)

  1. 域名解析 → TCP 建连:浏览器获取服务器地址并建立 TCP 连接。已有可复用连接时可以省去重复建连。
  2. ClientHello → ServerHello:双方协商 TLS 版本、加密算法等参数,交换用于临时密钥协商的信息,并据此推导握手密钥。
  3. 服务器证明身份 → 客户端校验:服务器发送证书及握手签名等信息;浏览器检查可信证书链、域名匹配、有效期,并验证服务器持有相应私钥。
  4. 握手确认 → 生成应用数据密钥:双方验证握手消息没有被篡改,推导用于保护后续通信的密钥。
  5. 加密发送 HTTP 请求 → 加密返回响应:采用高效的对称认证加密,同时保护数据的机密性和完整性。

这个流程描述的是首次、完整的 TLS 1.3 握手。TLS 1.2 的握手细节可能不同;HTTP/3 则通过 QUIC 建连并集成 TLS 1.3,不需要先建立 TCP 连接。

2.3 必要的关键概念

概念 作用
请求方法与状态码 方法说明希望对资源执行什么操作;状态码说明处理结果。
无状态 每个 HTTP 请求在协议语义上独立;业务登录态需要应用层机制维持。
TLS 为通信提供机密性、完整性和对端身份认证能力。
数字证书与 CA 将域名身份与公钥建立可信关联;浏览器通过证书链及服务器签名验证身份。
临时密钥交换与对称加密 前者安全地协商共享秘密,后者高效保护实际的 HTTP 数据。
多路复用 一条连接可以并发承载多个请求,减少重复建连和应用层排队。

3. 高频面试追问

3.1 从输入 HTTPS 网址到收到响应,发生了什么?

通常是域名解析 → 建立连接 → TLS 握手 → 发送 HTTP 请求 → 处理响应。浏览器先查询域名对应的地址;使用 HTTP/1.1 或 HTTP/2 时,通常先进行 TCP 三次握手,再协商 TLS 参数并验证服务器证书。安全连接建立后,浏览器发送请求,服务器返回状态码、响应头和数据,浏览器再解析页面并请求其他资源。连接可能被复用,DNS、连接和部分资源也可能命中缓存,所以实际请求未必每次都完整经历这些步骤。HTTP/3 走 QUIC,建连方式不同。

3.2 HTTPS 为什么同时用到非对称密码技术和对称加密?

**因为密钥协商和大规模数据传输的需求不同。**在 TLS 1.3 中,双方通常使用 ECDHE 这样的临时密钥交换机制得到共享秘密,再推导出应用数据密钥;服务器使用证书对应的私钥完成身份认证。真正传输请求头、Cookie、响应体时,采用 AES-GCM 或 ChaCha20-Poly1305 等对称认证加密算法,效率更高,还能检测数据是否被篡改。直接拿证书公钥加密整个 HTTP 报文,既不符合现代 TLS 的主流流程,性能也不合适。

3.3 浏览器如何判断证书可信?能否防止中间人攻击?

**证书校验是防止服务器被冒充的关键。**浏览器会检查证书链能否连接到受信任的根证书、访问域名是否匹配、证书是否在有效期内,并按浏览器和平台策略进行其他检查。TLS 握手还会验证服务器是否持有证书对应的私钥。攻击者即使拦截网络流量,通常也无法伪造完整的身份验证和握手证明。

继续追问:自签名证书能用于 HTTPS 吗?

可以建立加密连接,但默认情况下浏览器通常不会信任它。企业内网可以把自建 CA 纳入受信任根证书列表;对公众网站一般应使用受信任 CA 签发的证书。忽略证书错误会削弱身份认证的意义。

3.4 TLS 1.2 和 TLS 1.3 有什么主要区别?

**TLS 1.3 的改进集中在安全性和握手延迟。**它移除了许多过时算法和旧式 RSA 密钥传输方式,常规完整握手通常只需约 1 个网络往返时延,而典型 TLS 1.2 完整握手通常需要约 2 个。TLS 1.3 还支持基于先前会话的恢复;在符合条件时,客户端可以发送 0-RTT 早期数据。

继续追问:0-RTT 可以直接用于支付或下单请求吗?

一般不建议。0-RTT 早期数据存在重放风险,更适合服务端能安全处理重复执行的请求。支付、下单等状态变更操作应避免直接使用早期数据,并在业务层做好幂等控制。

3.5 HTTPS 加密了哪些信息?用了 HTTPS 就绝对安全吗?

**HTTPS 能保护 TLS 连接里的 HTTP 请求和响应,包括 URL 路径、查询参数、请求头、Cookie 和正文。**但传输过程中,目标 IP、流量大小和时间等元数据通常仍可观察;域名也可能通过普通 DNS 查询或未加密的 SNI 暴露,具体取决于部署方式。TLS 在代理或 CDN 处终止时,终止节点能看到解密后的内容。因此 HTTPS 并不能替代输入校验、权限控制和防 XSS 等措施,也不能证明一个网站本身没有恶意内容。

3.6 HTTP/1.1、HTTP/2、HTTP/3 为什么不断演进?

**主要为了解决连接利用率和高延迟、丢包环境下的性能问题。**HTTP/1.1 默认使用持久连接,但同一连接上的响应存在顺序约束,浏览器通常通过多条连接并发请求。HTTP/2 引入二进制分帧、多路复用和头部压缩,一条 TCP 连接可以并发处理多个请求,但 TCP 丢包仍可能阻塞同一连接内的其他流。HTTP/3 把传输层改为基于 UDP 的 QUIC,不同流可以独立推进,减少跨流队头阻塞;不过同一流内的顺序约束和网络拥塞仍然存在。三个版本的 HTTP 方法和状态码语义基本一致。

3.7 HTTP 无状态,为什么又有长连接和登录状态?

**无状态、长连接和登录状态属于不同层面。**HTTP 无状态指协议不会自动把前后两次请求关联成同一个业务会话;长连接是传输层连接可以被反复使用,减少建连开销;登录状态由应用通过 Cookie、Session 或令牌等机制实现。比如用户登录后,浏览器在后续请求中携带会话 Cookie,服务器据此识别用户。即使这些请求共用一条 TCP 连接,HTTP 的无状态特性也没有改变。

3.8 GET 和 POST 有什么区别?幂等性如何理解?

**GET 主要用于获取资源,按协议语义应当安全、幂等;POST 用于提交数据,其操作通常可能产生状态变化,默认不保证幂等。**幂等指相同请求执行一次和多次,对目标资源产生的预期效果相同,例如重复 PUT 同一份资源内容。它不代表返回码必须相同。GET 的参数经常出现在 URL 中,但不能简单以“GET 走 URL、POST 走请求体”作为协议边界。对支付、下单一类 POST 接口,我会通过幂等键、唯一业务流水号等机制避免重复处理。

3.9 HTTP 缓存是怎么工作的?HTTPS 会影响缓存吗?

HTTP 缓存主要靠响应头控制,HTTPS 仍然可以正常使用浏览器缓存和 CDN 缓存。响应带有 Cache-Control: max-age 等信息时,客户端可在内容新鲜期间直接复用缓存;过期后可以携带 If-None-Match 或 If-Modified-Since 做条件请求。资源没有变化,服务器通常返回 304 Not Modified,客户端继续使用已有内容。no-cache 允许存储,但复用前需要重新验证;no-store 要求缓存不要存储。用户私有数据应额外考虑 private 和敏感信息防缓存策略。

3.10 项目里如何把 HTTP 平稳切换为 HTTPS?

我会先保证证书和整条业务链路可用,再做全站升级。部署有效证书、配置 TLS 版本和自动续期后,把 HTTP 请求重定向到 HTTPS,检查图片、脚本、接口是否存在混合内容,并给登录 Cookie 设置 Secure、HttpOnly 和合适的 SameSite。如果前面有负载均衡器或 CDN,还要确认它与源站之间的连接是否得到适当保护。最后观察证书过期告警、重定向循环和握手失败,再逐步启用 HSTS;HSTS 已生效后,浏览器会直接优先使用 HTTPS,减少明文降级风险。

继续追问:301、302 和 307、308 重定向有什么差别?

301、308 表示永久重定向,302、307 表示临时重定向。307 和 308 要求保留原请求方法及请求体;301 和 302 在浏览器处理 POST 时可能转为 GET。页面级 HTTP 升级常见 301;需要严格保留接口请求方法时,应考虑 307 或 308,同时确认客户端兼容性。

4. 易混淆概念对比

4.1 HTTP 与 HTTPS

维度 HTTP HTTPS
传输保护 通常明文,无内置 TLS 保护 通过 TLS 或集成 TLS 的 QUIC 保护传输
身份认证 无内置服务器证书校验 通常用证书验证服务器身份
默认端口 80 443
主要用途 非敏感的受控测试环境等 互联网网页、接口、登录、支付等
共同点 使用 HTTP 的请求方法、状态码等语义 使用相同的 HTTP 应用语义

4.2 密钥交换、数字签名、对称加密

机制 在现代 HTTPS 中的角色 解决的问题
ECDHE 等临时密钥交换 双方协商共享秘密并推导密钥 避免直接传输会话密钥,并支持前向保密
CA 证书与服务器数字签名 建立域名、公钥与服务器身份的可信关联 降低服务器被冒充的风险
对称认证加密 加密 HTTP 数据,并校验完整性 高效防窃听、防篡改

4.3 HTTP/1.1、HTTP/2、HTTP/3

维度 HTTP/1.1 HTTP/2 HTTP/3
底层传输 TCP TCP QUIC(基于 UDP)
并发方式 常通过多条连接并发 单连接多路复用 多条 QUIC 流并发
头部传输 文本格式 二进制帧、HPACK 压缩 二进制帧、QPACK 压缩
阻塞特点 同一连接有响应顺序约束 消除了 HTTP 层的跨请求顺序阻塞,仍受 TCP 丢包影响 缓解跨流丢包阻塞,单流和拥塞约束仍在
HTTPS 的关系 可运行在 TLS 上 浏览器中通常使用 TLS QUIC 集成 TLS 1.3

4.4 HTTP 无状态与 HTTP 长连接

概念 关注点 示例
无状态 多次请求之间的业务上下文不会由 HTTP 自动保存 登录后依靠 Cookie 或令牌识别用户
长连接 一条底层连接能否处理多次请求 HTTP/1.1 默认支持持久连接

二者可以同时成立:一条连接可以复用很多次,但请求之间的业务状态仍需应用维护。

5. 总结

HTTP 是客户端和服务器通过请求、响应交换资源与接口数据的应用层协议,核心特点是请求—响应和无状态。HTTPS 为 HTTP 通信增加 TLS 安全保护,通过证书验证服务器身份、通过密钥协商建立加密密钥,再用对称认证加密保护数据的机密性和完整性。HTTP/1.1、HTTP/2 和 HTTP/3 的主要变化在于传输效率:HTTP/2 支持多路复用,HTTP/3 基于 QUIC 缓解跨流丢包阻塞。项目里一般会全站使用 HTTPS,配合证书续期、HSTS 和安全 Cookie。不过 HTTPS 主要负责传输安全,业务权限、XSS 和服务端漏洞还需要单独处理。