【学习笔记】HTTP

发布于:2025-06-12 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、早期发展

        HTTP(HyperText Transfer Protocol) 是万维网(WWW)的基础通信协议,最早诞生于1990年代初,用于在网络客户端和服务端之间传输超文本信息。

         HTTP/0.9 (1991): 只支持GET方法,响应体仅能传出纯文本,无响应头,满足了最早期超文本浏览的需求。

         HTTP/1.0 (1996): 引入 请求/响应报文格式 ,支持多种请求方法(如POSTHEAD),并借鉴 MIME 设计了消息头(Content-TypeContent-Length等)。这个版本奠定了现代HTTP的基本架构,但每次请求都要建立新的TCP连接,效率较低。

         HTTP/1.1 (1999): HTTP/1.1 通过 持久连接管道化 和更多的状态码提升了性能,同时完善了缓存控制、内容协商和分块传输。

二、HTTP/2

         HTTP/2在2015年被采纳,核心特性如下:

  • 二进制分帧: 将报文拆分为帧,以二进制形式传输,减少解析开销。
  • 单连接多路复用: 多个请求/响应流可以复用同一个TCP连接,消除队头阻塞。
  • 头部压缩: 对重复出现的请求/响应头部进行压缩,降低带宽占用。

由于以上特性,HTTP/2在移动网络等高延迟场景中优势明显。

三、HTTP/3与QUIC

HTTP/3引入了基于QUIC(UDP+TLS)的传输层:

  • 0-RTT 握手: 利用 QUIC 的 0-RTT 特性,实现更快的连接建立。

  • 内置加密: QUIC 本身集成 TLS 1.3,实现一次握手同时完成加密协商。

  • 连接迁移: 支持客户端 IP 切换(如从 Wi-Fi 切到蜂窝网络)时保留连接状态,提高移动场景稳定性。

四、HTTP核心原理

  • 无状态(Stateless): 每个请求独立处理,服务器不保留客户端状态;需要状态管理时,借助 Cookie、Session、Token 等机制实现会话保持。

  • 请求-响应模型: 客户端发送请求报文(包含请求行、头部、可选请求体),服务器返回响应报文(包含状态行、头部、响应体)。

  • 可扩展性: 通过自定义头部、方法和状态码,以及多版本并行共存,HTTP 实现了高度可扩展的设计。

  • 缓存与路由: Cache-Control、ETag、Last-Modified 等头部配合 CDN、反向代理,优化资源复用与网络负载。

五、实际实现

        当下,HTTP/HTTPS 协议由 浏览器(Chrome、Firefox 等) 与 服务器(Nginx、Apache、LiteSpeed、Node.js) 联合实现:

  1. TLS 加密

    • 现代网站几乎全部启用 HTTPS,在 HTTP 之上引入 TLS(通常为 TLS 1.2/1.3)保障传输安全。
    • TLS 1.3 简化握手、剔除弱加密套件,减少时延并提升安全性。
  2. 多路复用

    • 浏览器根据支持情况自动切换 HTTP/2 或 HTTP/3,底层由 QUIC 或 TCP 复用连接。
    • 服务器端配置 ALPN(Application-Layer Protocol Negotiation)来协商使用何种 HTTP 版本。
  3. 中间件与微服务

    • API 网关(如 Kong、Envoy)分发流量、做负载均衡;
    • gRPC 使用 HTTP/2 提供高效双向流与 Protocol Buffers 序列化;
    • GraphQL 在 HTTP/HTTPS 之上仅用一个端点,为客户端定制数据请求。

六、与TCP和UDP的关系

协议 所在层级 主要特性 典型用途
HTTP 应用层 请求/响应、无状态 网页浏览、RESTful API、微服务调用
TCP 传输层 面向连接、可靠、有序 HTTP/1.x、FTP、SMTP
UDP 传输层 无连接、不可靠、无序 DNS 查询、实时音视频、游戏数据包。通过QUIC与HTTP/3产生联系