面试题学习笔记 | 计算机网络 HTTP 协议
之前我们了解到,在 HTTP 请求的请求行中包含了 HTTP 协议的版本号。不同版本的 HTTP 协议具有不同的特性,因此,了解常见 HTTP 版本之间的区别是必要的
HTTP 1.0 和 2.0 有什么区别?
作为相对早期的 HTTP 版本,HTTP/1.0 主要具有以下特点:
增加了 HEAD、POST 等新方法
增加了响应状态码
引入了请求头和响应头
在请求中加入了 HTTP 版本号
引入了 Content-Type 头部,使得传输的数据类型不再局限于文本
然而,HTTP/1.0 存在严重的性能问题——每请求一个资源都需要新建一个 TCP 连接,且请求必须串行执行。为了解决这些问题,HTTP/1.1 进行了如下优化:
新增了
Connection: Keep-Alive
头部,实现持久连接,避免频繁建立 TCP 连接支持请求流水线(pipeline),允许在第一个请求未返回时继续发送后续请求,提高吞吐量
允许分块传输(chunked transfer encoding),服务器可以在不提前声明 Content-Length 的情况下逐步发送数据,适用于大文件传输
增强了缓存管理,引入
Cache-Control
头部引入
Host
头部,支持同一 IP 地址下托管多个网站,解决虚拟主机访问问题
尽管 HTTP/1.1 的优化提升了性能,但仍存在瓶颈。随着互联网的高速发展,这些瓶颈逐渐显现,促使了 HTTP/2 的诞生。
HTTP/2 主要优化点如下:
采用二进制协议而非文本协议,提高解析效率
在单个 TCP 连接上支持多路复用,允许多个请求并行进行,避免队头阻塞
采用 HPACK 进行头部压缩,减少冗余数据,提高传输效率
允许服务器主动推送资源(Server Push),减少不必要的请求等待
HTTP 2.0 和 3.0 有什么区别?
HTTP/2 通过多路复用、二进制帧、头部压缩和服务器推送等机制提升了性能,但仍然存在以下问题:
队头阻塞问题
虽然 HTTP/2 解决了应用层的队头阻塞问题(即同一连接中的多个请求可以交错发送),但仍然受制于 TCP 的丢包重传机制
在 TCP 连接中,一旦发生丢包,所有数据流都必须等待该数据包重传,导致整体延迟增加
连接建立延迟
在 HTTPS 连接中,TCP 三次握手完成后,还需要进行 TLS 握手,通常需要额外 1~2 个 RTT(往返时延)
在高延迟网络环境下,建立连接的成本较高
连接迁移限制
TCP 连接由四元组(源 IP、源端口、目标 IP、目标端口)标识,一旦网络环境发生变化(如设备切换 Wi-Fi 到移动数据),连接会断开并需要重新建立
HTTP/3 针对这些问题进行了优化:
基于 UDP 取代 TCP,使用 QUIC 协议,避免了 TCP 队头阻塞,同时提供了类似 TCP 的可靠传输机制
默认集成 TLS 1.3 加密,相比 HTTP/2 可选 TLS,HTTP/3 强制使用 TLS,增强安全性
减少连接建立时间,QUIC 结合 TLS 1.3,使连接建立与加密握手同时进行,大幅降低首次连接延迟
支持连接迁移,QUIC 通过连接 ID 识别连接,而不是依赖 IP 和端口,使其在网络切换时无需重新建立连接
HTTP 和 HTTPS 有什么区别?
有时在访问网站时,会看到如下提示:
该网站未使用私密连接。其他人可能会查看或修改您通过该网站发送和接收的信息
这是因为该网站使用的是 HTTP,而不是 HTTPS。二者的主要区别如下:
数据传输安全性
HTTP 采用明文传输,容易被监听和篡改
HTTPS 通过 SSL/TLS 协议对数据进行加密,确保数据的机密性和完整性
端口号
HTTP 默认使用端口 80
HTTPS 默认使用端口 443
性能
HTTP 由于无需加密,连接建立速度较快
HTTPS 需要进行 SSL/TLS 握手,带来额外的计算开销,但现代优化已降低了性能差距
SEO 影响
搜索引擎通常降低 HTTP 站点的排名
Google 等搜索引擎更倾向于优先展示 HTTPS 网站
扩展:HTTPS 的握手过程
HTTPS 使用 TLS 进行握手,以 RSA 方式举例,握手过程如下:
客户端 Hello
客户端向服务器发送
ClientHello
消息,包括支持的 TLS 版本、加密算法套件和随机数
服务器 Hello
服务器响应
ServerHello
消息,确认 TLS 版本和加密算法,并返回一个随机数和数字证书(包含公钥),证明自身身份
客户端密钥交换 & 生成对称密钥
客户端验证服务器证书后,生成一个
pre-master
密钥,并使用服务器公钥加密,发送给服务器服务器使用私钥解密
pre-master
,双方根据协商的算法生成最终的对称密钥
开始安全通信
双方交换
Finished
消息,确认加密通道建立,从此使用对称加密传输数据
HTTPS 的核心在于:服务器依赖 CA 机构获取公私钥,客户端通过 CA 机构验证服务器身份,利用公钥加密密钥,服务器通过私钥解密,从而建立安全的对称加密通信
总结
今天我们了解了 HTTP 各个版本的特点及其演进过程。可以发现,早期协议设计较为简单,只能满足基本需求,而随着互联网的发展,新的性能瓶颈不断出现,促使协议进行优化升级。
每次协议的迭代都旨在解决已有问题,但新技术的引入往往也会带来新的挑战。如何平衡性能、可靠性与安全性,是协议设计中必须慎重考虑的核心问题。在实际应用中,我们需要根据业务需求选择合适的 HTTP 版本,并关注未来的技术趋势,以便更好地优化网络通信性能