HTTP 概述
HTTP - 概述
Section titled “HTTP - 概述”超文本传输协议(Hypertext Transfer Protocol,简称 HTTP)是一种应用于分布式、协作式超媒体信息系统的应用层协议。自 20 世纪 90 年代初以来,它一直是万维网数据通信的基石。HTTP 是一种灵活、无状态的协议,它定义了消息如何格式化和传输,以及 Web 服务器和浏览器应如何响应各种命令。
其核心是一个客户端-服务器、请求-响应协议。客户端(例如,Web 浏览器、移动应用)向服务器发送请求,以访问 HTML 文件、图像、JSON 数据等资源。服务器处理这些请求并返回响应。虽然最初是为超文本文档设计的,但 HTTP 现在用于传输任何类型的数据。传统上,HTTP 使用 TCP/IP 的 80 端口,但现代 Web 通信几乎完全在 443 端口上使用 HTTPS(HTTP Secure),它使用 TLS 对 HTTP 流量进行加密。
HTTP 已演进出多个版本:HTTP/0.9(基础版本)、HTTP/1.0(增加了头部、方法)、HTTP/1.1(引入了持久连接、管线化、Host 头部)、HTTP/2(二进制协议、多路复用、头部压缩以提升性能)和 HTTP/3(使用基于 UDP 的 QUIC 以进一步提升性能)。本教程重点介绍主要由 HTTP/1.1 确立的语义,这些语义是后续所有版本的基础。
HTTP 的核心特性
Section titled “HTTP 的核心特性”HTTP 的简洁和强大由三个基本特性定义:
- HTTP 是面向连接的,但按事务管理: 在 HTTP/1.0 中,每个请求通常意味着建立一个新的 TCP 连接。HTTP/1.1 引入了持久连接(默认启用 keep-alive),允许在单个连接上进行多个请求/响应,显著降低了延迟。HTTP/2 和 HTTP/3 通过多路复用(multiplexing)进一步优化了连接的使用。尽管存在持久连接,协议仍按离散的请求-响应对进行操作。
- HTTP 与媒体无关: 只要客户端和服务器都能理解,HTTP 可以传输任何类型的数据(例如,HTML、图像、音频、视频、JSON、XML)。使用 MIME 类型的
Content-Type头部字段指定了数据格式,使客户端能够正确处理载荷(payload)。 - HTTP 是无状态的: 客户端发出的每个 HTTP 请求都是独立的,与之前的请求没有内在联系。默认情况下,服务器不会在来自同一客户端的请求之间存储任何会话上下文。这种无状态性简化了服务器设计并提高了可伸缩性。为了维护状态(例如,用于用户会话或购物车),应用程序会在 HTTP 之上使用 cookies、头部中的令牌(例如
Authorization)或 URL 重写等技术来管理。
HTTP/1.1 标准化了持久连接。HTTP/2 在单个 TCP 连接上引入了多路复用,而 HTTP/3 则转向 QUIC(基于 UDP),以提高性能并减少队头阻塞(head-of-line blocking)。
HTTP 采用客户端-服务器模型运行。客户端(用户代理 - user agent)发送请求,服务器返回响应。这种交互可以是直接的,也可以通过代理(proxies)、网关(gateways)或隧道(tunnels)等中介进行。
典型的涉及 HTTP 的 Web 应用程序架构包括:
- 客户端(User Agent): 发起请求的软件,例如 Web 浏览器(Chrome、Firefox)、命令行工具(cURL、Wget)、移动应用程序或 IoT 设备。
- 中介(可选): 位于客户端和源服务器之间的设备或服务器。
- 服务器(源服务器 - Origin Server): 托管请求资源或提供服务的服务器。示例包括 Apache、Nginx、IIS 或运行 Node.js、Python、Java 等的应用服务器。
HTTP 客户端构建并发送 HTTP 请求消息。此消息包括请求方法(例如 GET、POST)、目标资源的 URI、HTTP 协议版本、提供上下文的各种头部(如可接受的内容类型或身份验证凭据),有时还包括消息体(载荷 - payload),所有这些通常通过 TCP/IP 连接传输(对于 HTTP/3 则是 QUIC)。对于 HTTPS,TLS 握手发生在 HTTP 消息交换之前。
HTTP 服务器监听特定网络端口上的传入请求(例如,HTTP 为 80 端口,HTTPS 为 443 端口)。收到请求后,它会解析请求,执行请求的操作(例如,检索文件、查询数据库、执行业务逻辑),然后构建并发送回一个 HTTP 响应消息。响应包括一个指示结果的状态码,包含响应元数据的头部,以及通常包含资源表示或状态信息的消息体。