WHATWG Fetch 标准:现代网络请求的核心规范解析

WHATWG Fetch 标准:现代网络请求的核心规范解析

前言:为什么需要 Fetch 标准?

在现代 Web 开发中,资源获取(Fetching)是最基础也最频繁的操作之一。从加载图片、脚本到发起 API 请求,几乎所有 Web 应用都离不开网络请求。然而在 Fetch 标准出现之前,不同浏览器和 API 对网络请求的处理存在诸多不一致,导致开发者面临兼容性问题。

WHATWG 的 Fetch 标准正是为了解决这一问题而生,它为 Web 平台提供了统一的资源获取架构,规范了从请求发出到响应处理的完整流程。

Fetch 标准的核心目标

Fetch 标准旨在统一 Web 平台的资源获取行为,主要涵盖以下方面:

  1. 协议处理:规范不同 URL 方案(如 http、https、data、blob 等)的处理方式
  2. 重定向机制:定义请求重定向时的标准行为
  3. 跨源策略:统一 CORS(跨源资源共享)的处理逻辑
  4. 安全策略:整合 CSP(内容安全策略)、混合内容等安全相关处理
  5. 服务工作者:规范 Service Worker 对请求的拦截和处理
  6. 引用策略:统一 Referer 和 Referrer-Policy 的处理

Fetch 架构的核心概念

1. 请求与响应模型

Fetch 标准基于经典的请求-响应模型,但对其进行了更精细的定义:

  • 请求(Request):包含 URL、方法、头部、主体等完整信息
  • 响应(Response):包含状态码、状态消息、头部、主体等响应数据
  • 获取过程(Fetching):连接请求与响应的完整处理流程

2. 请求方法处理

标准对 HTTP 方法进行了特殊处理:

- **CORS 安全方法**:GET、HEAD、POST 这三种方法被认为是安全的
- **禁止方法**:CONNECT、TRACE、TRACK 因安全考虑被明确禁止
- **方法规范化**:常见方法(如 GET、POST 等)会被自动转为大写形式

3. 头部处理机制

Fetch 标准定义了专门的头部列表(header list)概念:

  • 支持重复的头部字段名
  • 提供结构化字段值的获取和设置方法
  • 规范了头部字段的解析和序列化规则

Fetch 标准的技术细节

1. URL 方案分类

标准将 URL 方案分为几类:

  • 本地方案:about、blob、data
  • HTTP(S)方案:http、https
  • 获取方案:包含本地方案加上 file 和 HTTP(S)方案

这种分类决定了不同 URL 的处理方式和安全限制。

2. 凭证管理

标准明确定义了凭证(Credentials)包含:

  • HTTP Cookies
  • TLS 客户端证书
  • HTTP 认证信息

这些凭证的处理在跨域请求时尤为重要。

3. 时间信息记录

为了支持性能监控,标准定义了详细的计时信息记录:

- 请求开始时间(start time)
- 重定向相关时间(redirect start/end time)
- 服务工作者处理时间(service worker start time)
- 网络请求时间(network-request start time)
- 响应开始时间(network-response start time)
- 请求结束时间(end time)
- 传输数据量(encoded/decoded body size)

这些数据为 Resource Timing API 提供了基础。

Fetch 标准的实际应用

1. 与现有 API 的关系

Fetch 标准统一了以下 Web API 的资源获取行为:

  • HTML 的 <img><script> 等元素
  • CSS 的 cursorlist-style-image 等属性
  • JavaScript 的 navigator.sendBeacon()self.importScripts() 等方法

2. fetch() API 的实现

标准定义的 fetch() JavaScript API 提供了底层的网络访问能力,相比传统的 XMLHttpRequest 具有诸多优势:

  • 基于 Promise 的异步处理
  • 更灵活的请求和响应控制
  • 内置的 CORS 支持
  • 流式数据处理能力

总结

WHATWG Fetch 标准作为现代 Web 开发的基石之一,通过统一资源获取的各个环节,极大简化了开发者的工作。它不仅规范了底层的网络请求处理,还为各种 Web API 提供了统一的获取机制。理解 Fetch 标准对于开发高性能、安全的 Web 应用至关重要。

随着 Web 技术的不断发展,Fetch 标准也在持续演进,例如增加对 HTTP/3 和 WebTransport 的支持,这些新特性将进一步丰富 Web 的网络能力。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳霆烁Orlantha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值