Http 特性

0 阅读4分钟

Http 特性

  1. 无状态 (Stateless): HTTP 是一种无状态协议,即服务器默认不会保留不同请求之间关于客户端的任何信息或会话状态。每个 HTTP 请求都被视为独立的、与其他请求无关的新请求。服务器处理完一个请求并发送响应后,就“忘记”了该客户端。这是 HTTP 设计的核心原则,简化了服务器设计并提高了可靠性(服务器崩溃后更容易恢复)。为了构建有状态的交互(如用户登录),需要使用额外的机制,如 Cookies、Session 或 Token。
  2. 基于请求/响应模型 (Request/Response Model): HTTP 通信总是由客户端(通常是 Web 浏览器)发起一个请求 (Request) 开始,然后服务器处理该请求并返回一个响应 (Response)。请求包含方法(如 GET, POST)、目标资源路径、协议版本、请求头(Headers)和可选的请求体(Body)。响应包含状态码(如 200 OK, 404 Not Found)、响应头(Headers)和可选的响应体(Body,通常是请求的资源或数据)。
  3. 应用层协议: HTTP 工作在 TCP/IP 协议栈的应用层,它依赖于下层协议(如 TCP)提供可靠的数据传输。这意味着 HTTP 本身不关心数据如何在网络中传输(路由、错误纠正等),只定义客户端和服务器之间交换消息的格式和规则。
  4. 支持可扩展的语义和方法: HTTP 定义了一组标准的请求方法(也称为“动词”)来表明对资源的不同操作意图:
    • GET: 请求获取指定的资源(只读)。
    • POST: 向指定资源提交数据(通常会导致服务器状态变化,如创建新资源)。
    • PUT: 替换指定资源的全部内容。
    • DELETE: 请求删除指定的资源。
    • HEAD: 与 GET 类似,但只请求资源的元信息(响应头),不返回响应体。
    • PATCH: 对资源进行部分修改。
    • OPTIONS: 请求服务器告知其支持的请求方法或其它选项。
    • 等等。 这些方法提供了丰富的语义,使得 HTTP 不仅能获取资源,还能创建、修改和删除资源(RESTful API 的基础)。
  5. 可协商的内容 (Content Negotiation): 客户端可以在请求头中指定它能够处理或偏好的资源表示形式(如语言 Accept-Language、字符集 Accept-Charset、媒体类型 Accept、编码方式 Accept-Encoding)。服务器可以根据这些信息,选择最合适的资源版本返回给客户端(如果可用)。
  6. 支持缓存 (Caching): HTTP 协议内置了强大的缓存机制。通过特定的请求/响应头(如 Cache-Control, Expires, ETag, Last-Modified),客户端(浏览器)和中间代理服务器可以存储资源的副本。后续请求可以直接使用缓存的副本(如果有效),显著减少网络流量、降低服务器负载并提高响应速度。
  7. 连接管理 (Connection Management):
    • 短连接 (HTTP/1.0 默认): 每个请求/响应对都需要建立一个新的 TCP 连接,完成后立即关闭。效率低,延迟高。
    • 持久连接 / Keep-Alive (HTTP/1.1 默认): 同一个 TCP 连接可以用于发送多个请求和接收多个响应(按顺序)。减少了 TCP 握手次数,提高了效率。
    • 管道化 (Pipelining, HTTP/1.1 可选): 允许客户端在收到前一个响应之前,在同一个连接上发送多个请求。服务器必须按请求顺序返回响应。实现复杂且存在队头阻塞问题,未被广泛采用。
    • 多路复用 (Multiplexing, HTTP/2): 允许在同一个 TCP 连接上并发地交错发送多个请求和响应消息帧,彻底解决了 HTTP/1.x 的队头阻塞问题,极大提高了性能。
  8. 可扩展的头部 (Extensible Headers): HTTP 消息头(Headers)是高度可扩展的。协议定义了许多标准头(如 Content-Type, User-Agent, Authorization),但也允许客户端和服务器使用自定义的非标准头(通常以 X- 开头,但这不是强制规定)。头部用于传递大量元数据,控制缓存、认证、内容协商、连接行为等。
  9. 分层系统 (Layered System): 通信路径上可以存在中间节点(如代理、网关、CDN)。这些节点可以提高性能(缓存)、提供安全性(防火墙)、负载均衡或实现协议转换(网关)。只要客户端和服务器之间的接口一致,它们通常不会感知或不需要了解中间层。

补充说明

  • 超文本的扩展: 虽然最初为传输超文本(HTML)设计,但 HTTP 早已成为在万维网上传输任何类型数据的事实标准协议,包括 JSON、XML、图片、视频、音频、文件等。它是现代 Web 应用(包括 RESTful API)的基础。
  • 版本演进: HTTP 有多个版本(HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, HTTP/3),每个版本都在性能、安全性和功能上有所改进(如 HTTP/2 的多路复用、头部压缩,HTTP/3 基于 QUIC 协议)。