Media CDN memungkinkan Anda menentukan header permintaan dan respons kustom.
Header kustom memungkinkan Anda melakukan hal berikut:
- Tampilkan data geografis tentang klien, seperti negara, wilayah, atau kota, yang dapat Anda gunakan untuk menampilkan konten yang dilokalkan.
- Tentukan apakah respons disajikan dari {i>cache<i} (seluruhnya atau sebagian) dan dari lokasi cache mana layanan itu disajikan.
- Hapus, ganti, atau tambahkan ke header permintaan dan respons.
Anda juga dapat menggunakan header untuk mengarahkan permintaan ke origin baru. Jika Anda perlu mengonfigurasi Lintas Asal Header Berbagi Resource (CORS), konfigurasi CORS untuk setiap rute.
Menetapkan header kustom
Header ditetapkan pada setiap rute, yang memungkinkan Anda menambah dan menghapus header untuk konten yang berbeda, seperti manifes atau segmen video.
Secara default, nilai header yang ditambahkan dipisahkan koma dan ditambahkan ke respons atau header permintaan dengan nama bidang yang sama.
Untuk menimpa nilai yang ada, tetapkan replace
ke true
.
Contoh .routing.pathMatchers[].routeRules[].headerAction
berikut menunjukkan
header yang ditambahkan dan dihapus di resource EdgeCacheService
:
gcloud edge-cache services describe prod-media-service
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"
Contoh ini melakukan hal berikut:
- Tambahkan 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 header statis {i>string<i}. - Menghapus dua header internal.
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 tidak boleh 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 {i> cache<i} yang terdekat dengan pengguna. | ✔ | ||
client_city |
Nama kota tempat permintaan berasal—misalnya,
Mountain View untuk Mountain View, California. Tidak ada
daftar kanonis nilai yang valid untuk variabel ini. Nama-nama kota dapat
berisi huruf US-ASCII, angka, spasi, dan karakter berikut:
!#$%&'*+-.^_`|~ . |
✔ | ✔ | |
client_city_lat_long |
Lintang dan bujur kota tempat permintaan dibuat
asal—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 berhubungan langsung dengan
ISO-3166-2
kode tersebut. |
✔ | ✔ | ✔ |
client_region_subdivision |
Subdivisi—misalnya, provinsi atau negara bagian—negara
yang terkait dengan alamat IP klien. Ini adalah subdivisi CLDR Unicode
ID, seperti USCA atau CAON . Kode Unicode ini
berasal dari subdivisi yang ditentukan oleh
ISO-3166-2
standar. |
✔ | ✔ | ✔ |
client_rtt_msec |
Estimasi waktu transmisi bolak-balik antara CDN dan Klien HTTP(S), dalam milidetik. Ini adalah waktu pulang pergi yang lancar (SRTT) yang diukur oleh stack TCP CDN, per RFC 2988. | ✔ | ✔ | |
device_request_type |
Jenis perangkat yang digunakan klien. Berikut ini adalah
nilai: DESKTOP , MOBILE ,
TABLET , SMART_TV ,
GAME_CONSOLE , WEARABLE ,
dan UNDETERMINED . |
✔ | ✔ | |
original_request_id |
ID unik yang ditetapkan untuk permintaan yang awalnya
menghasilkan respons ini. Diisi hanya jika ini berbeda dengan
request_id untuk respons yang di-cache. |
✔ | ||
origin_name |
Resource EdgeCacheOrigin tempat respons
di-proxy-kan. |
✔ | ||
origin_request_header |
Mencerminkan nilai header Origin dalam permintaan untuk Lintas Asal Kasus penggunaan Resource Sharing (CORS). | ✔ | ||
proxy_status |
Daftar proxy HTTP perantara di jalur respons. Nilainya
didefinisikan oleh
RFC 9209.
Resource EdgeCacheService direpresentasikan oleh
Google-Edge-Cache . Jika respons diambil dari tempat asal,
EdgeCacheOrigin
resource diwakili oleh Google-Edge-Cache-Origin . |
✔ | ||
tls_sni_hostname |
Indikasi nama server (seperti yang didefinisikan dalam RFC 6066), jika yang disediakan oleh klien selama {i>handshake <i}TLS atau QUIC. Nama host adalah dikonversi menjadi huruf kecil, dan tanda titik di akhir akan dihapus. | ✔ | ✔ | |
tls_version |
Versi TLS yang dinegosiasikan antara klien dan load balancer
selama handshake SSL. Nilai yang memungkinkan mencakup TLSv1 ,
TLSv1.1 , TLSv1.2 , dan
TLSv1.3 . Jika klien terhubung menggunakan QUIC, bukan
TLS, nilainya adalah QUIC. |
✔ | ✔ | |
tls_cipher_suite |
Cipher suite yang dinegosiasikan selama TLS handshake. Nilai ditentukan
oleh IANA
TLS Cipher Suite Registry—misalnya,
TLS_RSA_WITH_AES_128_GCM_SHA256 . Nilai ini kosong
untuk koneksi klien QUIC dan tidak terenkripsi. |
✔ | ✔ | |
user_agent_family |
Kelompok browser yang digunakan klien. Berikut ini adalah
nilai: 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 untuk berikut, yang akan dihapus:
X-User-IP
- Header apa pun dengan
X-Google
atauX-GFE
Kunci dan nilai header harus sesuai dengan RFC 7230, dengan formulir yang sudah tidak berlaku tidak diizinkan.
Semua kunci header ditulis dalam huruf kecil (per HTTP/2).
Beberapa header digabungkan. Ketika ada beberapa kasus yang sama kunci header (misalnya,
Via
), load balancer menggabungkan nilainya menjadi daftar yang dipisahkan koma untuk kunci header tunggal. Hanya header yang nilainya dapat direpresentasikan sebagai daftar yang dipisahkan koma yang digabungkan. Header lain, sepertiSet-Cookie
, tidak pernah digabungkan.Beberapa {i>header<i} ditambahkan, atau nilai ditambahkan ke dalamnya. Media CDN selalu menambahkan atau mengubah header tertentu, seperti
Via
danX-Forwarded-For
.Media CDN memperluas header respons dengan resource yang didukung variabel, meskipun ditetapkan oleh klien atau asal. Hal ini memungkinkan Anda menyetel header dinamis dari klien Anda (seperti pemutar video) atau asal infrastruktur Anda, selain mengonfigurasi {i>header <i}khusus. Media CDN tidak memperluas variabel di jalur permintaan.
Sebagai contoh, sesuai dengan aturan yang dijelaskan sebelumnya,
X-Goog-
dan HeaderX-Amz-
dipertahankan dan menggunakan huruf kecil.
Nilai status cache
Variabel header {cdn_cache_status}
dapat menampilkan beberapa nilai
yang sesuai dengan tingkat cache
yang menyalurkan respons. Pertimbangkan
panduan berikut untuk menafsirkan variabel header {cdn_cache_status}
:
- Jika header berisi
hit
, konten yang diminta telah diambil dari cache. - Jika header berisi
miss
, konten yang diminta tidak ditemukan di simpul {i>cache<i} dan harus diambil dari {i>node<i} upstream. - Jika header berisi
fetch
, konten yang diminta adalah diambil dari origin. Jika header berisi
uncacheable
, konten yang diminta adalah dianggap tidak dapat di-cache oleh beberapa atau semua komponen {i>caching<i} infrastruktur IT.- Jika header juga berisi
hit
ataumiss
, elemen konten yang diminta dianggap tidak dapat di-cache oleh beberapa komponen yang disimpan dalam cache dan dapat di-cache oleh orang lain. - Jika header juga tidak berisi
hit
ataumiss
, konten yang diminta dianggap tidak dapat disimpan dalam cache oleh semua komponen {i>caching<i}, dan semua permintaan untuk konten ini akan diambil dari origin. Untuk memastikan bahwa konten Anda disimpan dengan benar di cache, tinjau asal Media CDN persyaratan.
- Jika header juga berisi
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 dengan entri log. |
✔ | |
age |
Mengembalikan usia objek yang di-cache (jumlah detik yang telah dalam cache). Usia biasanya dihitung berdasarkan kapan pada awalnya di-cache dalam lokasi cache longtail (shield). Respons tanpa header |
✔ | |
via |
Mengidentifikasi Google sebagai proxy perantara. Atribut ini ditetapkan sebagai |
✔ | ✔ |
server |
Ditetapkan sebagai Google-Edge-Cache . |
✔ | |
cdn-loop |
Mengidentifikasi loop—misalnya, dengan host asal adalah sama dengan host yang menghadap pengguna (edge). Token |
✔ | |
forwarded |
Versi terstruktur dari header {i>Header<i} ini memungkinkan Anda
mengidentifikasi alamat IP koneksi
ketika {i>proxy<i} (atau {i>proxy<i}) ada di jalur. Misalnya, jika
klien dengan alamat IP
Untuk beberapa {i>proxy<i} sisi klien, klien yang terhubung ke Media CDN adalah alamat terakhir yang ditambahkan di header dengan sejumlah nilai. |
✔ | |
x-forwarded-for |
Versi standar tidak terstruktur dan de-facto
Header Kedua header dikirim dalam permintaan untuk mendukung origin lama yang mungkin
tidak mengetahui header |
✔ |
Kunci header ditulis dalam huruf kecil untuk header permintaan dan respons karena header tidak peka huruf besar/kecil.
Header lainnya, termasuk lokasi edge point of presence (PoP) dan cache
(seperti hit
dan miss
), dapat ditambahkan dengan menggunakan
variabel header dinamis.