跳转到内容
搜索文档

标头

最后更新 查看 MarkdownAgent 设置

背景

所有 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 运行时的服务器端特性。

getAll() 方法

尽管 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; ]

USVString 返回类型

在 Cloudflare Workers 中,Headers.get 方法返回 USVString 而非 Web 标准规定的 ByteString。在大多数场景下,这不应产生明显影响。要比较这两种字符串类的差异,请参阅此 Playground 示例

Cloudflare 标头

Cloudflare 会在传入请求和传出响应上设置多个自定义标头。虽然其中一些用于自身的跟踪和记录,但许多标头对您的应用程序(或 Worker)也很有用。

有关 Cloudflare 请求标头的文档列表,请参阅 Cloudflare HTTP 标头

相关资源

这篇文档对您有帮助吗?