Header Permintaan dan Respons

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal ini, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Gunakan halaman referensi ini untuk mengetahui detail tentang header HTTP yang didukung serta batasan permintaan dan respons di App Engine. Untuk memahami cara App Engine menerima permintaan dan mengirim respons, lihat Cara Penanganan Permintaan.

Header permintaan

Permintaan HTTP masuk meliputi header HTTP yang dikirim oleh klien. Untuk tujuan keamanan, beberapa header dibersihkan, diubah, atau dihapus oleh proxy perantara sebelum mencapai aplikasi.

Header yang dihapus dari permintaan masuk

Header berikut akan dihapus dari permintaan masuk jika klien mengirimkannya:

  • Header dengan nama yang cocok dengan pola X-Google-*. Pola nama ini sudah digunakan untuk Google.

  • Header dengan nama yang cocok dengan header khusus App Engine. Hanya pencocokan persis yang tidak peka huruf besar/kecil yang akan dihapus. Misalnya, header bernama X-Appengine-Country atau X-AppEngine-Country akan dihapus, tetapi X-Appengine-Cntry tidak.

Selain itu, header berikut akan dihapus dari permintaan masuk karena terkait dengan transfer data HTTP antara klien dan server:

  • Accept-Encoding
  • Connection
  • Keep-Alive
  • Proxy-Authorization
  • TE
  • Trailer
  • Transfer-Encoding

Misalnya, server dapat mengirim respons yang di-gzip secara otomatis, bergantung pada nilai header permintaan Accept-Encoding. Aplikasi itu sendiri tidak perlu mengetahui encoding konten mana yang dapat diterima klien.

Permintaan dan WSGI

Server menentukan objek aplikasi Python yang akan dipanggil dengan membandingkan URL permintaan dengan pola URL di file konfigurasi aplikasi. Kemudian, objek aplikasi akan dipanggil menggunakan argumen seperti yang ditentukan dalam standar WSGI. Objek aplikasi akan melakukan tindakan yang sesuai dengan permintaan, lalu menyiapkan respons dan menampilkannya sebagai daftar string.

Sebagian besar aplikasi menggunakan framework, seperti webapp2, untuk menangani permintaan WSGI. webapp2 disertakan sebagai bagian dari runtime Python 2.7.

Permintaan dan CGI

Server menentukan skrip pengendali Python yang akan dijalankan dengan membandingkan URL permintaan dengan pola URL di file konfigurasi aplikasi. Kemudian, skrip akan dijalankan di lingkungan yang telah diisi dengan data permintaan. Seperti yang dijelaskan dalam standar CGI, server menempatkan data permintaan dalam variabel lingkungan dan aliran data input standar. Skrip ini melakukan tindakan yang sesuai dengan permintaan, lalu menyiapkan respons dan menempatkannya di aliran data output standar.

Sebagian besar aplikasi menggunakan library untuk mengurai permintaan CGI dan menampilkan respons CGI, seperti modul cgi dari library standar Python, atau framework web yang mengetahui protokol CGI (seperti webapp). Anda dapat melihat dokumentasi CGI untuk mengetahui detail tentang variabel lingkungan dan format aliran data input.

Header khusus App Engine

Sebagai layanan ke aplikasi, App Engine menambahkan header berikut ke semua permintaan:

X-Appengine-Country
Negara tempat permintaan berasal, sebagai kode negara ISO 3166-1 alpha-2. App Engine menentukan kode ini dari alamat IP klien. Perlu diperhatikan bahwa informasi negara tidak berasal dari database WHOIS; ada kemungkinan bahwa alamat IP yang memiliki informasi negara di database WHOIS tidak akan memiliki informasi negara di header X-Appengine-Country. Aplikasi Anda harus menangani kode negara khusus ZZ (negara tidak diketahui).
X-Appengine-Region
Nama region tempat permintaan berasal. Nilai ini hanya berlaku dalam konteks negara di X -Appengine-Country. Misalnya, jika negaranya adalah "US" dan region-nya adalah "ca", maka "ca" berarti "California", bukan Kanada. Daftar lengkap nilai region yang valid dapat ditemukan di standar ISO-3166-2.
X-Appengine-City
Nama kota tempat permintaan berasal. Misalnya, permintaan dari kota Mountain View mungkin memiliki nilai header mountain view. Tidak ada daftar kanonis nilai yang valid untuk header ini.
X-Appengine-CityLatLong
Garis lintang dan bujur kota tempat permintaan berasal. String ini mungkin terlihat seperti "37.386051,-122.083851" untuk permintaan dari Mountain View.
X-Cloud-Trace-Context
ID unik untuk permintaan yang digunakan untuk Cloud Trace dan Cloud Logging. Tidak ada opsi untuk menonaktifkan header ini atau memilih frekuensi sampling untuk pelacakan karena semua aplikasi lingkungan standar App Engine akan dilacak secara otomatis.
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]

Daftar alamat IP yang dipisahkan koma yang digunakan untuk merutekan permintaan klien. IP pertama dalam daftar ini umumnya adalah IP klien yang membuat permintaan. IP berikutnya memberikan informasi tentang server proxy yang juga menangani permintaan sebelum mencapai server aplikasi. Misalnya:

X-Forwarded-For: clientIp, proxy1Ip, proxy2Ip
X-Forwarded-Proto [http | https]

Menampilkan http atau https berdasarkan protokol yang digunakan klien untuk terhubung ke aplikasi Anda.

Load Balancer Google Cloud menghentikan semua koneksi https, lalu meneruskan traffic ke instance App Engine melalui http. Misalnya, jika pengguna meminta akses ke situs Anda melalui https://PROJECT_ID.REGION_ID.r.appspot.com, nilai header X-Forwarded-Proto adalah https.

Selain itu, App Engine dapat menetapkan header berikut untuk penggunaan internal oleh App Engine:

  • X-Appengine-Https
  • X-Appengine-User-IP
  • X-Appengine-Api-Ticket
  • X-Appengine-Request-Log-Id
  • X-Appengine-Default-Version-Hostname
  • X-Appengine-Timeout-Ms
Layanan App Engine dapat menambahkan header permintaan tambahan:

  • Untuk pengendali login:admin atau login:required yang ditentukan dalam app.yaml, App Engine akan menambahkan kumpulan header berikut:

    • X-Appengine-User-Email, dengan contoh header: "ange@example.com"
    • X-Appengine-Auth-Domain, dengan contoh header: "example.com"
    • X-Appengine-User-ID, dengan contoh header: "100979712376541954724"
    • X-Appengine-User-Nickname, dengan contoh header: "ange"
    • X-Appengine-User-Organization, dengan contoh header: "example.com"
    • X-Appengine-User-Is-Admin, dengan contoh header: "1"
  • Layanan Task Queue akan menambahkan header tambahan ke permintaan yang memberikan detail tentang tugas dalam permintaan, dan antrean yang terkait dengannya.

  • Permintaan dari Layanan Cron menambahkan header berikut:

    X-Appengine-Cron: true

    Lihat Mengamankan URL untuk cron guna mengetahui detail selengkapnya.

  • Permintaan yang berasal dari aplikasi App Engine lain akan menyertakan header yang mengidentifikasi aplikasi yang membuat permintaan, jika aplikasi yang membuat permintaan menggunakan Layanan URL Fetch:

    X-Appengine-Inbound-Appid

    Lihat dokumentasi App Identity untuk mengetahui detail selengkapnya.

Meminta respons

Dokumentasi header HTTP ini hanya berlaku untuk respons terhadap permintaan HTTP masuk. Respons dapat diubah sebelum ditampilkan ke klien. Untuk header HTTP yang terkait dengan permintaan keluar yang berasal oleh kode App Engine Anda, lihat dokumentasi header untuk URLFetch.

Header yang dihapus

Header berikut akan diabaikan dan dihapus dari respons:

  • Connection
  • Content-Encoding*
  • Content-Length
  • Date
  • Keep-Alive
  • Proxy-Authenticate
  • Server
  • Trailer
  • Transfer-Encoding
  • Upgrade

* Dapat ditambahkan kembali jika respons dikompresi oleh App Engine.

Header dengan karakter non-ASCII yang terkandung dalam nama atau nilai juga akan dihapus.

Header yang ditambahkan atau diganti

Header berikut akan ditambahkan atau diganti dalam respons:

Cache-Control, Expires, dan Vary

Header ini menentukan kebijakan penyimpanan cache untuk proxy web perantara (seperti Google Frontend dan Internet Service Provider) dan browser. Jika aplikasi Anda menetapkan header respons ini, biasanya header tersebut tidak akan dimodifikasi kecuali jika aplikasi juga menetapkan header Set-Cookie, atau respons dibuat untuk pengguna yang login menggunakan akun administrator.

Jika aplikasi Anda menetapkan header respons Set-Cookie, header Cache-Control akan disetel ke private (jika sebelumnya sudah lebih ketat) dan header Expires akan ditetapkan ke tanggal saat ini (jika belum dilakukan sebelumnya). Umumnya, hal ini akan memungkinkan browser untuk menyimpan respons dalam cache, tetapi tidak untuk server proxy perantara. Hal ini untuk alasan keamanan, karena jika respons di-cache secara publik, pengguna lain selanjutnya dapat meminta resource yang sama, dan mengambil cookie pengguna pertama.

Jika Anda menggunakan framework berbasis webob (seperti webapp atau webapp2), framework tersebut akan menetapkan header Cache-Control ke no-cache secara default, sehingga Anda harus menggantinya jika ingin melakukan penyimpanan dalam cache di pengendali skrip.

Jika aplikasi Anda tidak menetapkan header respons Cache-Control, server dapat menetapkannya ke private dan menambahkan header Vary: Accept-Encoding.

Untuk mengetahui informasi selengkapnya tentang penyimpanan ke dalam cache, termasuk daftar nilai Vary yang didukung Google Frontend, lihat Respons penyimpanan ke dalam cache.

Content-Encoding

Bergantung pada header permintaan dan Content-Type respons, server dapat secara otomatis mengompresi isi respons, seperti yang dijelaskan di atas. Dalam hal ini, server akan menambahkan header Content-Encoding: gzip untuk menunjukkan bahwa isi respons telah dikompresi. Lihat bagian kompresi respons untuk mengetahui detail selengkapnya.

Content-Length atau Transfer-Encoding

Server selalu mengabaikan header Content-Length yang ditampilkan oleh aplikasi. Server akan menetapkan Content-Length ke panjang isi respons (setelah kompresi, jika kompresi diterapkan), atau menghapus Content-Length, dan menggunakan potongan encoding transfer (menambahkan header Transfer-Encoding: chunked ).

Content-Type

Jika tidak ditentukan oleh aplikasi, server akan menyetel header Content-Type: text/html default.

Date

Setel ke tanggal dan waktu saat ini.

Server

Tetapkan ke Google Frontend. Server pengembangan menetapkannya ke Development/x, dengan x adalah nomor versinya.

Jika Anda mengakses halaman dinamis di situs saat login menggunakan akun administrator, App Engine akan menyertakan statistik per permintaan pada header respons:

X-Appengine-Resource-Usage
Resource yang digunakan oleh permintaan, termasuk waktu sisi server dalam jumlah milidetik.

Respons dengan statistik penggunaan resource akan dibuat tidak dapat disimpan dalam cache.

Jika header X-Appengine-BlobKey ada dalam respons aplikasi, header tersebut dan header X-Appengine-BlobRange opsional akan digunakan untuk mengganti isi dengan semua atau sebagian dari konten blobstore blob. Jika Content-Type tidak ditentukan oleh aplikasi, objek tersebut akan ditetapkan ke jenis MIME blob. Jika rentang diminta, status respons akan diubah menjadi 206 Partial Content, dan header Content-Range akan ditambahkan. Header X-Appengine-BlobKey dan X-Appengine-BlobRange akan dihapus dari respons. Biasanya, Anda tidak perlu menetapkan header ini sendiri, karena class blobstore_handlers.BlobstoreDownloadHandler menetapkannya. Baca bagian Menyajikan Blob untuk mengetahui detailnya.

Header respons yang ditetapkan dalam konfigurasi aplikasi

Header Respons HTTP kustom dapat ditetapkan per URL untuk jalur dinamis dan statis di file konfigurasi aplikasi Anda. Lihat bagian http_headers dalam dokumentasi konfigurasi untuk mengetahui detail selengkapnya.