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
atauX-AppEngine-Country
akan dihapus, tetapiX-Appengine-Cntry
tidak.
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 khususZZ
(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
atauhttps
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 melaluihttp
. Misalnya, jika pengguna meminta akses ke situs Anda melaluihttps://PROJECT_ID.REGION_ID.r.appspot.com
, nilai header X-Forwarded-Proto adalahhttps
.
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
Untuk pengendali
login:admin
ataulogin:required
yang ditentukan dalamapp.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
, danVary
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
, headerCache-Control
akan disetel keprivate
(jika sebelumnya sudah lebih ketat) dan headerExpires
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
keno-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 keprivate
dan menambahkan headerVary: 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 headerContent-Encoding: gzip
untuk menunjukkan bahwa isi respons telah dikompresi. Lihat bagian kompresi respons untuk mengetahui detail selengkapnya.Content-Length
atauTransfer-Encoding
Server selalu mengabaikan header
Content-Length
yang ditampilkan oleh aplikasi. Server akan menetapkanContent-Length
ke panjang isi respons (setelah kompresi, jika kompresi diterapkan), atau menghapusContent-Length
, dan menggunakan potongan encoding transfer (menambahkan headerTransfer-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 keDevelopment/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.