Membuat header kustom di layanan backend

Halaman ini menjelaskan cara mengonfigurasi header kustom di layanan backend yang digunakan oleh Load Balancer Aplikasi klasik.

Header permintaan dan respons kustom memungkinkan Anda menentukan header tambahan yang dapat ditambahkan load balancer ke permintaan dan respons HTTP(S). Bergantung pada informasi yang terdeteksi oleh load balancer, header ini dapat mencakup informasi berikut:

  • Latensi ke klien
  • Lokasi geografis alamat IP klien
  • Parameter koneksi TLS

Header permintaan kustom didukung untuk layanan backend, sedangkan header respons kustom didukung untuk layanan backend dan bucket backend.

Load balancer menambahkan header tertentu secara default ke semua permintaan dan respons HTTP(S) yang di-proxy-kan antara backend dan klien. Untuk mengetahui informasi selengkapnya, lihat Proxy target.

Sebelum memulai

  • Jika perlu, update ke Google Cloud CLI versi terbaru:

    gcloud components update
    

Cara kerja header kustom

Header kustom berfungsi sebagai berikut:

  • Saat meneruskan permintaan ke backend, load balancer akan menambahkan header permintaan.

    Load balancer menambahkan header permintaan kustom hanya ke permintaan klien, bukan ke pemeriksaan health check. Jika backend Anda memerlukan header tertentu untuk otorisasi yang tidak ada dalam paket health check, health check mungkin gagal.

  • Load balancer menetapkan header respons sebelum menampilkan respons ke klien.

Untuk mengaktifkan header kustom, tentukan daftar header dalam properti layanan backend atau bucket backend.

Anda menentukan setiap header sebagai string header-name:header-value. Header harus berisi titik dua yang memisahkan nama header dan nilai header.

Nama header harus memenuhi persyaratan berikut:

  • Nama header harus berupa definisi nama kolom header HTTP yang valid (sesuai RFC 7230).
  • Nama header tidak boleh X-User-IP atau CDN-Loop.
  • Header hop-by-hop berikut tidak boleh digunakan: Keep-Alive, Transfer-Encoding, TE, Connection, Trailer, dan Upgrade. Sesuai dengan RFC 2616, header ini tidak disimpan oleh cache atau dipropagasi oleh proxy target.
  • Nama header tidak boleh diawali dengan X-Google, X-Goog-, X-GFE atau X-Amz-.
  • Nama header tidak boleh muncul lebih dari sekali dalam daftar header yang ditambahkan.

Nilai header harus memenuhi persyaratan berikut:

  • Nilai header harus berupa definisi kolom header HTTP yang valid sesuai RFC 7230, dengan bentuk yang sudah tidak digunakan tidak diizinkan.
  • Nilai header boleh kosong.
  • Nilai header dapat mencakup satu atau beberapa variabel, yang diapit dalam tanda kurung kurawal, yang diperluas ke nilai yang disediakan load balancer. Untuk mengetahui informasi selengkapnya, lihat Variabel yang didukung dalam nilai header.

Alat command line gcloud memiliki flag untuk menentukan header permintaan, yaitu --custom-request-header. Pastikan untuk menyertakan nama header dan nilai header dalam tanda kutip tunggal lurus (') dengan tanda ini.

Format umum untuk tanda adalah:

    --custom-request-header='HEADER_NAME:[HEADER_VALUE]'

Berikut adalah contoh nilai header dengan dua variabel, client_region dan client_city, yang disertakan dalam tanda kurung kurawal.

    --custom-request-header='X-Client-Geo-Location:{client_region},{client_city}'

Untuk klien yang berada di Mountain View, California, load balancer menambahkan header sebagai berikut:

X-Client-Geo-Location:US,Mountain View

Untuk membuat layanan backend dengan header kustom, lihat Mengonfigurasi header permintaan kustom.

Variabel yang didukung dalam nilai header

Untuk menyisipkan metadata dinamis dan khusus permintaan ke dalam header kustom, Anda dapat menggunakan variabel berikut. Saat variabel ini disertakan dalam tanda kurung kurawal ({}) dalam nilai header, load balancer akan meluaskannya ke nilai real-time-nya, seperti lokasi geografis klien, parameter koneksi, atau status cache, sebelum meneruskan header ke backend atau klien Anda.

Variabel Deskripsi
cdn_cache_id Kode lokasi dan ID instance cache yang digunakan untuk menayangkan permintaan. Nilai ini sama dengan yang diisi di kolom jsonPayload.cacheId log permintaan Cloud CDN di Logging.
cdn_cache_status Status cache saat ini. Nilai dapat berupa hit, miss, revalidated, stale, uncacheable, atau disabled untuk objek apa pun yang ditayangkan oleh backend yang mendukung Cloud CDN.
origin_request_header Mencerminkan nilai header Origin dalam permintaan untuk kasus penggunaan Cross-Origin Resource Sharing (CORS).
client_rtt_msec Perkiraan waktu transmisi round-trip antara load balancer dan klien HTTP(S), dalam milidetik. Ini adalah parameter waktu perjalanan pulang pergi yang di-smoothing (SRTT) yang diukur oleh stack TCP load balancer, per RFC 2988. RTT yang diperhalus adalah algoritma yang menangani variasi dan anomali yang mungkin terjadi dalam pengukuran RTT.
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 kode ISO-3166-2.)
client_region_subdivision Subdivisi, misalnya, provinsi atau negara bagian, dari negara yang terkait dengan alamat IP klien. Ini adalah ID sub-divisi CLDR Unicode, seperti USCA atau CAON. (Kode Unicode ini berasal dari sub-wilayah yang ditentukan oleh standar ISO-3166-2.)
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 US-ASCII, dan karakter berikut: !#$%&'*+-.^_`|~.
client_city_lat_long Lintang dan Bujur kota asal permintaan, misalnya, 37.386051,-122.083851 untuk permintaan dari Mountain View.
client_ip_address Alamat IP klien. Ini biasanya sama dengan alamat IP klien yang merupakan alamat kedua dari belakang di header X-Forwarded-For, kecuali jika klien menggunakan proxy atau header X-Forwarded-For telah dimodifikasi.
client_port Port sumber klien.
client_encrypted true jika koneksi antara klien dan load balancer dienkripsi (menggunakan HTTPS, HTTP/2, atau HTTP/3); jika tidak, false.
client_protocol Protokol HTTP yang digunakan untuk komunikasi antara klien dan load balancer. Salah satu dari HTTP/1.0, HTTP/1.1, HTTP/2, atau HTTP/3.
device_request_type

Perangkat klien, yang berasal dari nilai header User-Agent.

Nilai yang mungkin adalah: DESKTOP, GAME_CONSOLE, GAME_CONSOLE, MOBILE, SET_TOP_BOX, SMART_SPEAKER, SMART_TV,