カスタム ヘッダーを定義する

Media CDN では、カスタム リクエスト ヘッダーとカスタム レスポンス ヘッダーを指定できます。

カスタム ヘッダーを使用すると、次のことができます。

  • 国、リージョン、都市など、クライアントに関する地理データを返し、ローカライズされたコンテンツの表示に使用できます。
  • レスポンスがキャッシュから提供されているかどうか(全体または一部)と、レスポンスを送信するキャッシュのロケーションを決定します。
  • リクエスト ヘッダーとレスポンス ヘッダーの両方を削除、置換、または追加します。

カスタム ヘッダーを設定する

ヘッダーはルートごとに設定されるため、マニフェストや動画セグメントなど、さまざまなコンテンツのヘッダーを追加または削除できます。

ルートごとのカスタム リクエスト ヘッダーは、キャッシュの決定を行う前に、CDN 処理パスの早い段階で設定します。たとえば、cache-control ヘッダーをルートごとのカスタム ヘッダーとして設定すると、CDN のキャッシュ動作に影響します。

デフォルトでは、追加されたヘッダー値はカンマ区切りで、同じフィールド名を持つレスポンス ヘッダーまたはリクエスト ヘッダーに追加されます。

既存の値を上書きするには、replacetrue に設定します。

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 スニペットは、カスタム ヘッダーを含むルートルールを示しています。

route_rule {
  description = "video routes"
  priority    = 1
  match_rule {
    prefix_match = "/video/"
  }
  origin = google_network_services_edge_cache_origin.default.name
  header_action {
    response_header_to_add {
      # Return the country (or region) associated with the client's IP address.
      header_name  = "client-geo"
      header_value = "{client_region}"
      replace      = true
    }
    request_header_to_add {
      # Inform the upstream origin server that the request is from Media CDN.
      header_name  = "x-downstream-cdn"
      header_value = "Media CDN"
    }
    response_header_to_remove {
      header_name = "X-User-ID"
    }
    response_header_to_remove {
      header_name = "X-Other-Internal-Header"
    }
  }
}

この例では、次の操作を行います。

  • {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 アドレスに関連付けられる国(またはリージョン)。これは、USFR などの Unicode CLDR リージョン コードです。ほとんどの国では、このコードが ISO-3166-1 alpha-2 コードに直接対応しています
client_region_subdivision サブディビジョン(クライアントの IP アドレスに関連付けられる国の県や州など) これは、USCACAON などの Unicode CLDR サブディビジョン ID です。この Unicode コードは、ISO-3166-2 標準で定義されているサブディビジョンから派生しています。
client_rtt_msec CDN と HTTP(S) クライアント間の推定ラウンドトリップ送信時間(ミリ秒単位)。これは、ロードバランサの TCP スタックによって測定される平滑化されたラウンドトリップ時間(SRTT)パラメータです(RFC 2988 を遵守)。
device_request_type クライアントが使用しているデバイスのタイプ。有効な値は次のとおりです。DESKTOPMOBILETABLETSMART_TVGAME_CONSOLEWEARABLE、および UNDETERMINED
edge_location_country_code クライアントのリクエストを処理している 特定の Media CDN エッジ キャッシュ サーバーの地理的な国/地域を識別します。これは、USJP などの 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 バージョン 。可能な値は、TLSv1TLSv1.1TLSv1.2TLSv1.3 などです。クライアントが TLS ではなく QUIC を使用して接続した場合、値は QUIC です。
tls_cipher_suite TLS handshake 中にネゴシエートされた暗号スイート。値は IANA TLS 暗号スイートレジストリで定義されます(例: TLS_RSA_WITH_AES_128_GCM_SHA256)。この値は、QUIC と暗号化されていないクライアント接続の場合には空です。