Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Headers

最終更新 Markdown で表示Agent セットアップ

背景

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 ランタイムがサーバーサイドであることに対応しています。

getAll() メソッド

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

USVString の戻り値型

Cloudflare Workers では、Headers.get メソッドは Web 標準で規定された ByteString ではなく USVString を返します。ほとんどの場面では、目立った影響はありません。この 2 つの文字列クラスの違いを比較するには、この Playground の例 を参照してください。

Cloudflare ヘッダー

Cloudflare は、着信リクエストと発信レスポンスに独自のカスタムヘッダーをいくつか設定します。一部は Cloudflare 自身の追跡や管理に使われますが、多くは自分のアプリケーションや Workers でも役立ちます。

ドキュメント化されている Cloudflare リクエストヘッダーの一覧は、Cloudflare HTTP ヘッダー を参照してください。

関連リソース

役に立ちましたか?