前端面试八股 http
http 1.0
特点
- 短连接:每个请求需独立建立和关闭TCP连接,意味着每获取一个资源(如图片、JS文件)都需要重新建立连接。
- 无状态:服务器不记录用户信息,需依赖Cookie等机制实现会话管理
不足
- 资源浪费:频繁建立连接导致带宽和服务器资源消耗大
http1.0使用的是短连接,每个请求都需要重新握手建立TCP连接,导致资源请求延迟较高,效率低下,特别是在现代网页中,资源请求数量众多时问题尤为突出。
http 1.1
加入了持久连接和缓存机制
特点
- 长连接(Keep-Alive:默认复用TCP连接,减少握手次数,提升效率
- 管道化请求:支持流水线,允许在一个连接上连续发送多个请求,提高了性能。但响应仍需顺序处理(未解决队头阻塞)
- 功能扩展:
- Host头:支持虚拟主机,同一IP可托管多个域名。
- 断点续传:通过Range头实现部分资源请求(状态码206)。
- 缓存控制:引入Cache-Control、ETag等精细缓存策略
不足
- 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分
- 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞
- 请求只能从客户端开始,服务器只能被动响应
大多数传统的 Web 应用仍然在使用 HTTP/1.1。
http 2.0
多路复用与性能的飞跃
特点
- 二进制协议:HTTP/2不再使用HTTP/1.x的纯文本传输,而改为二进制帧传输,进一步提高了传输效率。
- 多路复用:允许多个请求和响应在同一TCP连接上并行处理,解决了HTTP/1.1中的队头阻塞问题
- 头部压缩:通过HPACK算法对请求和响应头部进行压缩,减少了头部传输的开销
- 服务器推送:服务器可以在客户端请求之前主动推送资源(如CSS、JS),减少页面加载时间
不足
- 并没有完全解决队头阻塞的问题。只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层。 HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。
HTTP/2非常适合资源复杂、依赖大量并行加载的现代网站,如单页应用、复杂的企业级系统和内容丰富的新闻媒体网站等。
http 3.0
基于UDP的QUIC协议
特点
- 基于QUIC协议:HTTP/3的最大特点是它不再基于TCP协议,而是使用了基于UDP的QUIC协议。QUIC提供了类似TCP的可靠传输机制(如丢包检测和重传),同时消除了TCP的固有问题,如队头阻塞。
- 多路复用且无队头阻塞:由于QUIC的独立数据流特性,即使某个数据包丢失,也不会影响其他流的数据传输,彻底避免了队头阻塞问题。
- 连接速度更快:QUIC协议在网络不稳定或延迟较高的环境下表现优异,减少了连接建立的时间,尤其适合移动网络。
- 加密默认开启:所有HTTP/3的通信都是加密的,提升了隐私和安全性。
区别
- 协议格式:HTTP/1 和 HTTP/1.1 是文本协议,HTTP/2 是二进制协议,HTTP/3 基于 QUIC 协议。
- 性能表现:HTTP/2 和 HTTP/3 在性能上有了巨大的提升,解决了 HTTP/1 和 HTTP/1.1 中的队头阻塞和连接建立开销大等问题。
总结
HTTP协议的演进本质是性能、安全、适应性的螺旋上升:
- 性能:短连接→长连接→多路复用→零延迟连接。
- 安全:明文→HTTPS→内置加密。
- 适应性:固定网络→移动网络→物联网(IoT