HTTP のリクエストヘッダーとレスポンスヘッダーは、すべて Headers API ↗ 経由で利用できます。
ヘッダー名に複数の値がある場合、それらの値はカンマ区切りの 1 つの文字列に結合されます。そのため、Headers.get は常に文字列または null を返します。これは Set-Cookie 以外のすべてのヘッダー名に当てはまります。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 ヘッダーを 1 つのヘッダーにまとめることを禁止しています。そのため、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 メソッドは Web 標準で規定された ByteString ↗ ではなく USVString ↗ を返します。ほとんどの場面では、目立った影響はありません。この 2 つの文字列クラスの違いを比較するには、この Playground の例 ↗ を参照してください。
Cloudflare は、着信リクエストと発信レスポンスに独自のカスタムヘッダーをいくつか設定します。一部は Cloudflare 自身の追跡や管理に使われますが、多くは自分のアプリケーションや Workers でも役立ちます。
ドキュメント化されている Cloudflare リクエストヘッダーの一覧は、Cloudflare HTTP ヘッダー を参照してください。
- コンソールへのヘッダーのログ出力 - コンソールにヘッダーをログ出力する方法を確認します。
- Cloudflare HTTP ヘッダー - Cloudflare が追加する特定ヘッダーの一覧です。