CDN Media memungkinkan Anda menentukan header permintaan dan respons 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 (secara penuh atau sebagian) dan lokasi cache tempat respons ditayangkan.
- Menghapus, mengganti, atau menambahkan ke header permintaan dan respons.
Anda juga dapat menggunakan header untuk me-rutekan permintaan ke origin yang berbeda. Jika Anda perlu mengonfigurasi header Cross-Origin Resource Sharing (CORS), konfigurasikan kebijakan CORS untuk setiap rute.
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 penyimpanan dalam cache. Misalnya, jika Anda menetapkan header cache-control
sebagai header kustom per rute, hal ini akan memengaruhi perilaku penyimpanan dalam cache 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
.
Contoh .routing.pathMatchers[].routeRules[].headerAction
berikut menunjukkan
header yang ditambahkan dan dihapus dalam 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:
- 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 yang dipisahkan koma dari lokasi (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 yang valid untuk variabel ini. Nama kota dapat
berisi huruf, angka, spasi, dan karakter berikut US-ASCII:
!#$%&'*+-.^_`|~ . |
✔ | ✔ | |
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 sesuai langsung dengan
kode
ISO-3166-2. |
✔ | ✔ | ✔ |
client_region_subdivision |
Subdivisi—misalnya, provinsi atau negara bagian—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 |
Estimasi waktu transmisi round-trip antara CDN dan klien HTTP(S), dalam milidetik. Ini adalah parameter waktu round-trip (SRTT) yang dihaluskan yang diukur oleh stack TCP CDN, sesuai dengan 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 . |
✔ | ✔ | |
original_request_id |
ID unik yang ditetapkan ke permintaan yang awalnya
menghasilkan 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 diwakili oleh
Google-Edge-Cache . Jika respons diambil dari origin, resource EdgeCacheOrigin direpresentasikan oleh Google-Edge-Cache-Origin . |
✔ | ||
tls_sni_hostname |
Server Name Indication (seperti yang dijelaskan dalam RFC 6066), jika diberikan oleh klien selama TLS atau QUIC handshake. 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 |
Cipher suite yang dinegosiasikan selama TLS handshake. Nilai ini ditentukan
oleh Registry Cipher Suite TLS
IANA—misalnya,
TLS_RSA_WITH_AES_128_GCM_SHA256 . Nilai ini kosong
untuk koneksi klien QUIC dan 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 untuk header berikut, yang akan dihapus:
X-User-IP
- Header apa pun dengan
X-Google
atauX-GFE
Kunci dan nilai header harus mematuhi RFC 7230, dengan bentuk yang tidak digunakan lagi tidak diizinkan.
Semua kunci header menggunakan 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 lain, sepertiSet-Cookie
, tidak pernah digabungkan.Beberapa header ditambahkan, atau nilai ditambahkan ke header tersebut. CDN Media selalu menambahkan atau mengubah header tertentu, seperti
Via
danX-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 klien (seperti pemutar video) atau infrastruktur origin, selain mengonfigurasi header kustom. Media CDN tidak memperluas variabel di jalur permintaan.
Misalnya, sesuai dengan aturan yang dijelaskan sebelumnya, header
X-Goog-
danX-Amz-
dipertahankan dan diubah 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 disimpan dalam cache oleh beberapa atau semua komponen infrastruktur cache.- Jika header juga berisi
hit
ataumiss
, 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
ataumiss
, konten yang diminta dianggap tidak dapat di-cache oleh semua komponen penyimpanan dalam cache, dan semua permintaan untuk konten ini diambil dari origin. Untuk memastikan konten Anda di-cache dengan benar, tinjau persyaratan asal Media CDN.
- 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 yang diberikan. Nilai ini juga ditambahkan
ke log permintaan sebagai jsonPayload.requestId , yang
memungkinkan Anda mengaitkan permintaan/respons klien ke entri log. |
✔ | |
age |
Menampilkan usia objek yang di-cache (jumlah detik objek berada dalam cache). Usia biasanya dihitung berdasarkan waktu saat objek pertama kali di-cache di lokasi cache long-tail (perisai). Respons tanpa header |
✔ | |
via |
Mengidentifikasi Google sebagai proxy perantara. Ini ditetapkan sebagai |
✔ | ✔ |
server |
Ditetapkan sebagai Google-Edge-Cache . |
✔ | |
cdn-loop |
Mengidentifikasi loop—misalnya, jika host origin sama dengan host (edge) yang ditampilkan kepada pengguna. Token |
✔ | |
forwarded |
Versi terstruktur header Header ini memungkinkan Anda mengidentifikasi alamat IP klien yang terhubung
saat proxy (atau proxy) berada di jalur. Misalnya, jika
klien dengan alamat IP
Jika ada beberapa proxy sisi klien, klien yang terhubung ke Media CDN adalah alamat terakhir yang ditambahkan dalam nilai header. |
✔ | |
x-forwarded-for |
Versi standar de facto dan tidak terstruktur dari 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 kunci header tidak peka huruf besar/kecil.
Header lain, termasuk lokasi edge point of presence (PoP) dan status cache (seperti hit
dan miss
), dapat ditambahkan menggunakan variabel header dinamis.