所有 HTTP 请求和响应标头均可通过 Headers API ↗ 访问。
当标头名称具有多个值时,这些值会合并为单个逗号分隔的字符串值。这意味着 Headers.get 始终返回字符串或 null 值。这适用于除 Set-Cookie 之外的所有标头名称,后者需要使用 Headers.getAll。下文 差异 部分对此进行了说明。
let headers = new Headers();
headers.get('x-foo'); //=> null
headers.set('x-foo', '123');
headers.get('x-foo'); //=> "123"
headers.set('x-foo', 'hello');
headers.get('x-foo'); //=> "hello"
headers.append('x-foo', 'world');
headers.get('x-foo'); //=> "hello, world"Workers 对 Headers API 的实现与 Web 标准在多个方面有所不同。这些差异是有意为之,反映了 Workers 运行时的服务器端特性。
尽管 Headers.getAll 方法在 Web 浏览器中已被废弃,Workers 仍为 Set-Cookie 标头提供此方法。这是因为 cookie 通常包含带逗号的日期字符串,这使得解析 Set-Cookie 标头中的多个值变得困难。
任何尝试将 Headers.getAll 用于其他标头名称的操作都会抛出错误。有关 Headers.getAll 的简要历史,请参阅此 GitHub issue ↗。
由于 RFC 6265 ↗ 禁止将多个 Set-Cookie 标头折叠为单个标头,Headers.append 方法允许您设置多个 Set-Cookie 响应标头,而不是将值追加到现有标头上。
const headers = new Headers();
headers.append("Set-Cookie", "cookie1=value_for_cookie_1; Path=/; HttpOnly;");
headers.append("Set-Cookie", "cookie2=value_for_cookie_2; Path=/; HttpOnly;");
console.log(headers.getAll("Set-Cookie"));
// Array(2) [ cookie1=value_for_cookie_1; Path=/; HttpOnly;, cookie2=value_for_cookie_2; Path=/; HttpOnly; ]在 Cloudflare Workers 中,Headers.get 方法返回 USVString ↗ 而非 Web 标准规定的 ByteString ↗。在大多数场景下,这不应产生明显影响。要比较这两种字符串类的差异,请参阅此 Playground 示例 ↗。
Cloudflare 会在传入请求和传出响应上设置多个自定义标头。虽然其中一些用于自身的跟踪和记录,但许多标头对您的应用程序(或 Worker)也很有用。
有关 Cloudflare 请求标头的文档列表,请参阅 Cloudflare HTTP 标头。
- 将标头记录到控制台 - 了解如何在控制台中记录标头。
- Cloudflare HTTP 标头 - 包含 Cloudflare 添加的特定标头列表。