Menentukan header kustom

Media CDN memungkinkan Anda menentukan header respons dan permintaan kustom.

Header kustom memungkinkan Anda melakukan hal berikut:

  • Menampilkan data geografis tentang klien, seperti negara, wilayah, atau kota, yang dapat Anda gunakan untuk menampilkan konten yang dilokalkan.
  • Menentukan apakah respons ditayangkan dari cache (seluruhnya atau sebagian) dan dari lokasi cache mana respons tersebut ditayangkan.
  • Menghapus, mengganti, atau menambahkan ke header permintaan dan respons.

Menetapkan header kustom

Header ditetapkan di setiap rute, yang memungkinkan Anda menambahkan dan menghapus header untuk konten yang berbeda, seperti manifes atau segmen video.

Tetapkan header permintaan kustom per rute di awal jalur pemrosesan CDN, sebelum keputusan caching. Misalnya, jika Anda menetapkan header cache-control sebagai header kustom per rute, header tersebut akan memengaruhi perilaku caching di CDN.

Secara default, nilai header yang ditambahkan dipisahkan koma dan ditambahkan ke header respons atau permintaan dengan nama kolom yang sama.

Untuk menimpa nilai yang ada, tetapkan replace ke true.

gcloud dan YAML

Untuk mencantumkan konfigurasi YAML untuk resource EdgeCacheService, gunakan perintah berikut:

gcloud edge-cache services describe prod-media-service

Bagian .routing.pathMatchers[].routeRules[].headerAction menampilkan header yang akan ditambahkan dan dihapus:

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

Cuplikan Terraform berikut menampilkan aturan rute dengan header kustom.

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"
    }
  }
}

Contoh ini melakukan hal berikut:

  • Menambahkan header client-geo kustom ke respons menggunakan variabel {client_region}, yang menampilkan negara (atau wilayah) yang terkait dengan alamat IP klien.
  • Menambahkan header x-downstream-cdn kustom ke permintaan menggunakan string statis.
  • Menghapus dua header internal.

Untuk mengonfigurasi header kustom khusus origin, lihat Mengonfigurasi penulisan ulang host atau modifikasi header khusus origin.

Variabel header dinamis

Header kustom dapat berisi satu atau beberapa variabel dinamis.

Header permintaan yang merupakan bagian dari kebijakan kunci cache (cacheKeyPolicy.includedHeaderNames) dapat berisi satu atau beberapa variabel kustom. Header permintaan yang berisi variabel dinamis lainnya tidak dapat menjadi bagian dari kunci cache.

Variabel Deskripsi Didukung untuk header permintaan Didukung untuk header permintaan dalam kunci cache Didukung untuk header respons
cdn_cache_status Daftar lokasi yang dipisahkan koma (kode IATA bandara terdekat) dan status setiap node cache di jalur permintaan/respons, dengan nilai paling kanan mewakili cache yang paling dekat dengan pengguna.
client_city Nama kota tempat permintaan berasal—misalnya, Mountain View untuk Mountain View, California. Tidak ada daftar kanonis nilai valid untuk variabel ini. Nama kota dapat berisi huruf US-ASCII, angka, spasi, dan karakter berikut: !#$%&'*+-.^_`|~.
client_city_lat_long Lintang dan bujur kota tempat permintaan berasal—misalnya, 37.386051,-122.083851 untuk permintaan dari Mountain View.
client_region Negara (atau wilayah) yang terkait dengan alamat IP klien. Ini adalah kode wilayah CLDR Unicode, seperti US atau FR. Untuk sebagian besar negara, kode ini secara langsung sesuai dengan kode ISO-3166-1 alpha-2.
client_region_subdivision Subdivisi—misalnya, provinsi atau negara bagian—dari negara yang terkait dengan alamat IP klien. Ini adalah ID subdivisi CLDR Unicode, seperti USCA atau CAON. Kode Unicode ini berasal dari subdivisi yang ditentukan oleh standar ISO-3166-2.
client_rtt_msec Perkiraan waktu transmisi pulang pergi antara CDN dan klien HTTP(S), dalam milidetik. Ini adalah parameter waktu transmisi pulang pergi yang dihaluskan (SRTT) yang diukur oleh stack TCP CDN, sesuai RFC 2988.
device_request_type Jenis perangkat yang digunakan klien. Berikut adalah nilai yang valid: DESKTOP, MOBILE, TABLET, SMART_TV, GAME_CONSOLE, WEARABLE, dan UNDETERMINED.
host Nomor host dan port server tempat permintaan klien awalnya dikirim, yang sesuai dengan nilai header permintaan Host untuk HTTP/1.1 atau pseudo-header :authority untuk HTTP/2.
original_request_id ID unik yang ditetapkan ke permintaan yang awalnya membuat respons ini. Diisi hanya jika berbeda dengan request_id untuk respons yang di-cache.
origin_name Resource EdgeCacheOrigin tempat respons di-proxy.
origin_request_header Mencerminkan nilai header Origin dalam permintaan untuk kasus penggunaan Cross-Origin Resource Sharing (CORS).
proxy_status Daftar proxy HTTP perantara di jalur respons. Nilai ini ditentukan oleh RFC 9209. Resource EdgeCacheService direpresentasikan oleh Google-Edge-Cache. Jika respons diambil dari origin, resource EdgeCacheOrigin direpresentasikan oleh Google-Edge-Cache-Origin.
tls_sni_hostname Indikasi nama server (seperti yang ditentukan dalam RFC 6066), jika diberikan oleh klien selama handshake TLS atau QUIC. Nama host dikonversi menjadi huruf kecil, dan titik di akhir akan dihapus.
tls_version Versi TLS yang dinegosiasikan antara klien dan load balancer selama handshake SSL. Nilai yang mungkin mencakup TLSv1, TLSv1.1, TLSv1.2, dan TLSv1.3. Jika klien terhubung menggunakan QUIC, bukan TLS, nilainya adalah QUIC.
tls_cipher_suite Suite cipher yang dinegosiasikan selama handshake TLS. Nilai ini ditentukan oleh IANA TLS Cipher Suite Registry—misalnya, TLS_RSA_WITH_AES_128_GCM_SHA256. Nilai ini kosong untuk QUIC dan koneksi klien yang tidak dienkripsi.
user_agent_family Keluarga browser yang digunakan klien. Berikut adalah nilai yang valid: APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NOKIA, NETFRONT, OBIGO, OPENWAVE, OPERA, OTHER, POLARIS, TELECA, SEMC, SMIT, dan USER_DEFINED.

Pertimbangan berikut berlaku untuk variabel kustom:

  • Header permintaan dan respons yang ada akan dipertahankan, kecuali yang berikut, yang akan dihapus:

    • X-User-IP
    • Header apa pun dengan X-Google atau X-GFE
  • Kunci dan nilai header harus sesuai dengan RFC 7230, dengan bentuk yang tidak digunakan lagi tidak diizinkan.

  • Semua kunci header dikonversi menjadi huruf kecil (per HTTP/2).

  • Beberapa header digabungkan. Jika ada beberapa instance kunci header yang sama (misalnya, Via), load balancer akan menggabungkan nilainya menjadi satu daftar yang dipisahkan koma untuk satu kunci header. Hanya header yang nilainya dapat direpresentasikan sebagai daftar yang dipisahkan koma yang digabungkan. Header lainnya, seperti Set-Cookie, tidak pernah digabungkan.

  • Beberapa header ditambahkan, atau nilai ditambahkan ke header tersebut. Media CDN selalu menambahkan atau mengubah header tertentu, seperti X-Forwarded-For.

  • Media CDN memperluas header respons apa pun dengan variabel yang didukung, meskipun ditetapkan oleh klien atau origin. Hal ini memungkinkan Anda menetapkan header dinamis dari infrastruktur klien (seperti pemutar video) atau origin, selain mengonfigurasi header kustom.

  • Sebagai contoh, sesuai aturan yang dijelaskan sebelumnya, header X-Goog- dan X-Amz- dipertahankan dan dikonversi menjadi huruf kecil.

Nilai status cache

Variabel header {cdn_cache_status} dapat menampilkan beberapa nilai yang sesuai dengan tingkat cache yang menayangkan respons. Pertimbangkan panduan berikut untuk menafsirkan variabel header {cdn_cache_status}:

  • Jika header berisi hit, konten yang diminta diambil dari cache.
  • Jika header berisi miss, konten yang diminta tidak ditemukan di node cache dan harus diambil dari node upstream.
  • Jika header berisi fetch, konten yang diminta diambil dari origin.
  • Jika header berisi uncacheable, konten yang diminta dianggap tidak dapat di-cache oleh beberapa atau semua komponen infrastruktur caching.

    • Jika header juga berisi hit atau miss, konten yang diminta dianggap tidak dapat di-cache oleh beberapa komponen caching dan dapat di-cache oleh komponen lainnya.
    • Jika header juga tidak berisi hit atau miss, konten yang diminta dianggap tidak dapat di-cache oleh semua komponen caching, dan semua permintaan untuk konten ini diambil dari origin. Untuk memastikan konten Anda di-cache dengan benar, tinjau persyaratan origin Media CDN.

Header default

Media CDN menambahkan header permintaan dan respons berikut ke permintaan origin dan respons klien.

Header Deskripsi Permintaan Respons
x-request-id ID unik untuk permintaan tertentu. Nilai ini juga ditambahkan ke log permintaan sebagai jsonPayload.requestId, yang memungkinkan Anda menghubungkan permintaan/respons klien ke entri log.
age

Menampilkan usia objek yang di-cache (jumlah detik objek berada dalam cache). Usia biasanya dihitung berdasarkan waktu objek awalnya di-cache di lokasi cache long-tail (shield).

Respons tanpa header age tidak ditayangkan dari cache.

server Ditetapkan sebagai Google-Edge-Cache.
cdn-loop

Mengidentifikasi loop—misalnya, saat host origin sama dengan host yang menghadap pengguna (edge).

Token google ditambahkan ke header sesuai RFC 8586. Token tidak dapat diubah.

forwarded

Versi terstruktur dari header x-forwarded-for. Header forwarded ditentukan dalam RFC 7239.

Header ini memungkinkan Anda mengidentifikasi alamat IP klien yang terhubung saat proxy (atau proxy) berada di jalur. Misalnya, jika klien dengan alamat IP 192.0.2.60 terhubung ke Media CDN melalui HTTPS, header forwarded akan diisi sebagai berikut:

forwarded: [for=192.0.2.60;proto=https]

Jika ada beberapa proxy sisi klien, klien yang terhubung ke Media CDN adalah alamat terakhir yang ditambahkan dalam nilai header value.

x-forwarded-for

Versi header forwarded yang tidak terstruktur dan de-facto standar. Nilai biasanya dipisahkan koma.

Kedua header dikirim dalam permintaan untuk mendukung origin lama yang mungkin tidak mengetahui header forwarded.

Kunci header dikonversi menjadi huruf kecil untuk header permintaan dan respons karena kunci header tidak peka huruf besar/kecil.

Header lainnya, termasuk lokasi titik kehadiran (PoP) edge dan status cache (seperti hit dan miss), dapat ditambahkan menggunakan variabel header dinamis.