コンテンツにスキップ

ヘッダー

背景

すべてのHTTPリクエストおよびレスポンスヘッダーは、Headers APIを通じて利用可能です。

ヘッダー名が複数の値を持つ場合、それらの値は単一のカンマ区切りの文字列値として連結されます。これは、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"

違い

  • Headers.getAllメソッドが廃止されたにもかかわらず、Cloudflareはこのメソッドを提供していますが、Set-Cookieヘッダーでのみ使用できます。これは、クッキーがしばしば日付文字列を含み、これにはカンマが含まれるためです。これにより、Set-Cookieヘッダー内の複数の値を解析することが難しくなる場合があります。他のヘッダー名でHeaders.getAllを使用しようとするとエラーが発生します。Headers.getAllの簡単な歴史は、このGitHubの問題で入手できます。

  • 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メソッドは、仕様によって指定されたByteStringの代わりにUSVStringを返します。ほとんどのシナリオでは、これに目立った影響はないはずです。これら2つの文字列クラスの違いを比較するには、このPlaygroundの例を参照してください。

Cloudflareヘッダー

Cloudflareは、受信リクエストおよび送信レスポンスに独自のカスタムヘッダーを多数設定します。一部は独自の追跡や帳簿管理に使用されるかもしれませんが、これらの多くはあなた自身のアプリケーションやWorkersにも役立つ可能性があります。

文書化されたCloudflareリクエストヘッダーのリストについては、HTTPリクエストヘッダーを参照してください。

関連リソース