Media CDN では、カスタム リクエスト ヘッダーとカスタム レスポンス ヘッダーを指定できます。
カスタム ヘッダーを使用すると、次のことができます。
- 国、リージョン、都市など、クライアントに関する地理データを返し、ローカライズされたコンテンツの表示に使用できます。
- レスポンスがキャッシュから提供されているかどうか(全体または一部)と、レスポンスを送信するキャッシュのロケーションを決定します。
- リクエスト ヘッダーとレスポンス ヘッダーの両方を削除、置換、または追加します。
カスタム ヘッダーを設定する
ヘッダーはルートごとに設定されるため、マニフェストや動画セグメントなど、さまざまなコンテンツのヘッダーを追加または削除できます。
ルートごとのカスタム リクエスト ヘッダーは、キャッシュの決定を行う前に、CDN 処理パスの早い段階で設定します。たとえば、cache-control ヘッダーをルートごとのカスタム ヘッダーとして設定すると、CDN のキャッシュ動作に影響します。
デフォルトでは、追加されたヘッダー値はカンマ区切りで、同じフィールド名を持つレスポンス ヘッダーまたはリクエスト ヘッダーに追加されます。
既存の値を上書きするには、replace を true に設定します。
gcloud と YAML
EdgeCacheService リソースの YAML 構成を一覧表示するには、次のコマンドを使用します。
gcloud edge-cache services describe prod-media-service
.routing.pathMatchers[].routeRules[].headerAction セクションには、追加および削除するヘッダーが表示されます。
routeRules:
- priority: 1
description: "video routes"
matchRules:
- prefixMatch: "/video/"
headerAction:
responseHeadersToAdd:
# Return the country (or region) associated with the client's IP address.
- headerName: "client-geo"
headerValue: "{client_region}"
replace: true
requestHeadersToAdd:
# Inform the upstream origin server the request is from Media CDN
- headerName: "x-downstream-cdn"
headerValue: "Media CDN"
responseHeadersToRemove:
- headerName: "X-User-ID"
- headerName: "X-Other-Internal-Header"
Terraform
次の Terraform スニペットは、カスタム ヘッダーを含むルートルールを示しています。
この例では、次の操作を行います。
{client_region}変数を使用して、カスタムclient-geoヘッダーをレスポンスに追加します。この変数は、クライアントの IP アドレスに関連付けられた国(またはリージョン)を返します。- 静的文字列を使用して、カスタム
x-downstream-cdnヘッダーをリクエストに追加します。 - 2 つの内部ヘッダーを削除します。
送信元固有のカスタム ヘッダーを構成するには、 送信元固有のホストの書き換えまたはヘッダーの変更を構成するをご覧ください。
動的ヘッダー変数
カスタム ヘッダーには 1 つ以上の動的変数を含めることができます。
キャッシュキー ポリシー(cacheKeyPolicy.includedHeaderNames)の一部であるリクエスト ヘッダーには、1 つ以上のカスタム変数を含めることができます。他の動的変数を含むリクエスト ヘッダーは、キャッシュキーの一部にすることはできません。
| 変数 | 説明 | リクエスト ヘッダーでのサポート | キャッシュキーのリクエスト ヘッダーでのサポート | レスポンス ヘッダーでのサポート |
|---|---|---|---|---|
cdn_cache_status |
リクエスト / レスポンス パス内の各キャッシュ ノードのロケーション(最も近い空港の IATA コード)とステータスのカンマ区切りのリスト。右端の値は、ユーザーに最も近いキャッシュを表します。 | ✔ | ||
client_city |
リクエスト送信元の市区町村の名前。たとえば、カリフォルニアの Mountain View の場合は Mountain View です。この変数について有効な値の正規リストはありません。都市名には、US-ASCII 文字、数字、スペース、および !#$%&'*+-.^_`|~ を含めることができます。 |
✔ | ✔ | |
client_city_lat_long |
リクエスト送信元の都市の緯度と経度。たとえば、Mountain View からのリクエストの場合は 37.386051,-122.083851 です。 |
✔ | ✔ | |
client_region |
クライアントの IP アドレスに関連付けられる国(またはリージョン)。これは、US や FR などの Unicode CLDR リージョン コードです。ほとんどの国では、このコードが
ISO-3166-1
alpha-2 コードに直接対応しています。 |
✔ | ✔ | ✔ |
client_region_subdivision |
サブディビジョン(クライアントの IP アドレスに関連付けられる国の県や州など)
これは、USCA や CAON などの Unicode CLDR サブディビジョン ID です。この Unicode コードは、ISO-3166-2 標準で定義されているサブディビジョンから派生しています。 |
✔ | ✔ | ✔ |
client_rtt_msec |
CDN と HTTP(S) クライアント間の推定ラウンドトリップ送信時間(ミリ秒単位)。これは、ロードバランサの TCP スタックによって測定される平滑化されたラウンドトリップ時間(SRTT)パラメータです(RFC 2988 を遵守)。 | ✔ | ✔ | |
device_request_type |
クライアントが使用しているデバイスのタイプ。有効な値は次のとおりです。DESKTOP、MOBILE、TABLET、SMART_TV、GAME_CONSOLE、WEARABLE、および UNDETERMINED。 |
✔ | ✔ | |
edge_location_country_code |
クライアントのリクエストを処理している
特定の Media CDN エッジ キャッシュ サーバーの地理的な国/地域を識別します。これは、US や JP などの ISO 3166-1
alpha-2 形式の国コードです。
これらの 2 文字のコードは、ISO 3166-1 標準で定義されている公式の国コード
から派生しています。 |
✔ | ✔ | |
host |
クライアント リクエストが最初に送信されたサーバーのホストとポート番号。HTTP/1.1 の Host リクエスト ヘッダーの値、または HTTP/2 の :authority 疑似ヘッダーに対応します。 |
✔ | ✔ | |
original_request_id |
このレスポンスを最初に生成したリクエストに割り当てられた一意の識別子。キャッシュに保存されたレスポンスの request_id とは異なる場合にのみ入力されます。 |
✔ | ||
origin_name |
レスポンスがプロキシされた EdgeCacheOrigin リソース。 |
✔ | ||
origin_request_header |
クロスオリジン リソース シェアリング(CORS)のユースケースのリクエストに含まれる送信元ヘッダーの値を反映したものになります。 | ✔ | ||
proxy_status |
レスポンス パスの中間 HTTP プロキシのリスト。値
は
RFC 9209で定義されます。
EdgeCacheService リソースは
Google-Edge-Cache で表されます。レスポンスが送信元から取得された場合、
EdgeCacheOrigin
リソースは Google-Edge-Cache-Origin で表されます。 |
✔ | ||
tls_sni_hostname |
RFC 6066 で定義されたサーバー名表示(TLS または QUIC handshake 中にクライアントによって提供された場合)。ホスト名は 小文字に変換され、末尾のドットはすべて削除されます。 | ✔ | ✔ | |
tls_version |
SSL handshake 中にクライアントとロードバランサの間でネゴシエートされた TLS バージョン
。可能な値は、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3 などです。クライアントが TLS ではなく QUIC を使用して接続した場合、値は QUIC です。 |
✔ | ✔ | |
tls_cipher_suite |
TLS handshake 中にネゴシエートされた暗号スイート。値は IANA TLS 暗号スイートレジストリで定義されます(例: TLS_RSA_WITH_AES_128_GCM_SHA256)。この値は、QUIC と暗号化されていないクライアント接続の場合には空です。 |