要求標頭與回應

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。

進一步瞭解區域 ID

本參考頁面詳細說明系統支援的 HTTP 標頭,以及 App Engine 中的要求與回應限制。如要瞭解 App Engine 如何接收要求及傳送回應,請參閱要求的處理方式一文。

要求標頭

傳入 HTTP 要求包含用戶端傳送的 HTTP 標頭。基於安全性考量,部分標頭在送達應用程式之前會由中繼 Proxy 進行處理或修改。

從傳入要求中移除的標頭

如果用戶端傳送下列標頭,系統會從傳入要求中移除這些標頭:

  • 名稱符合 X-Google-* 模式的標頭。此名稱模式是 Google 保留的名稱。

  • 名稱與 App Engine 專屬標頭 相符的標頭。系統只會移除完全相符且不區分大小寫的項目。舉例來說,系統會移除名為 X-Appengine-CountryX-AppEngine-Country 的標頭,但不會移除 X-Appengine-Cntry

此外,系統會從傳入要求中移除下列標頭,因為這些標頭與用戶端和伺服器之間的 HTTP 資料傳輸有關:

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

舉例來說,伺服器可能會根據 Accept-Encoding 要求標頭的值,自動傳送經過 GZip 壓縮的回應。應用程式本身不需要知道用戶端可接受哪些內容編碼。

App Engine 專屬標頭

App Engine 會為應用程式在所有要求中新增下列標頭:

X-Appengine-Country
發出要求的來源國家/地區,採用 ISO 3166-1 alpha-2 國家/地區代碼。App Engine 會根據用戶端的 IP 位址決定這個代碼。請注意,國家/地區資訊並非來自 WHOIS 資料庫;在 WHOIS 資料庫中,有國家/地區資訊的 IP 位址可能不會在 X-Appengine-Country 標頭中顯示國家/地區資訊。您的應用程式應處理特殊國家/地區代碼 ZZ (未知國家/地區)。
X-Appengine-Region
要求來源區域的名稱。這個值必須搭配 X -Appengine-Country 中的國家/地區一起理解。舉例來說,如果國家/地區是「US」而地區是「ca」,則「ca」表示「加州」而非加拿大。如需有效地區值的完整清單,請參閱 ISO-3166-2 標準。
X-Appengine-City
要求來源城市的名稱。例如,如果是來自 Mountain View (山景市) 的要求,標頭值可能為 mountain view。這個標頭沒有有效值的標準清單。如果無法解析城市,標頭值會設為 ?
X-Appengine-CityLatLong
要求來源城市的經緯度。如果是來自 Mountain View (山景市) 的要求,這個字串可能會是「37.386051,-122.083851」。如果無法解析城市,標頭值會設為 0.000000,0.000000
X-Cloud-Trace-Context
適用於 Cloud TraceCloud Logging 要求的專屬 ID。所有 App Engine 標準環境應用程式都會自動追蹤,因此沒有選項可用來停用這個標頭或選擇追蹤的取樣率。
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]

轉送用戶端要求的 IP 位址清單 (以逗號分隔)。清單中的第一個 IP 通常是建立要求的用戶端 IP。後續 IP 則會針對在要求送達應用程式伺服器之前,曾處理過該要求的 Proxy 伺服器提供相關資訊。例如:

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

依據用戶端用來連線到您應用程式的通訊協定,顯示 httphttps

Google Cloud 負載平衡器會終止所有 https 連線,然後透過 http 將流量轉送到 App Engine 執行個體。舉例來說,如果使用者要求透過 https://PROJECT_ID.REGION_ID.r.appspot.com 存取您的網站,則 X-Forwarded-Proto 標頭的值為 https

此外,App Engine 可能會設定下列標頭,供 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

App Engine 服務可能會新增其他要求標頭:

要求回應

本 HTTP 標頭說明文件僅適用於連入 HTTP 要求的回應。這個回應在傳回用戶端前可能已經過修改。

移除的標頭

系統會忽略並從回應中移除下列標頭:

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

* 如果回應經 App Engine 壓縮,則此標頭可能會重新加到回應中。

系統也會移除名稱或值含有非 ASCII 字元的標頭。

新增或取代的標頭

系統會在回應中新增或取代下列標頭:

Cache-ControlExpiresVary

這些標頭會將快取政策指定給中繼網路 Proxy (例如 Google 前端和網路服務供應器) 和瀏覽器。如果應用程式設定這些回應標頭,除非應用程式也設定 Set-Cookie 標頭,或是針對使用管理員帳戶登入的使用者產生回應,否則這些標頭通常不會修改。

如果應用程式設定 Set-Cookie 回應標頭,Cache-Control 標頭會設為 private (如果標頭不更嚴格),Expires 標頭則會設為目前日期 (如果標頭不屬於過去日期)。一般來說,這會讓瀏覽器快取回應,但不會快取中介 Proxy 伺服器。這是出於安全性考量,因為如果回應是公開快取的,其他使用者之後可能會要求相同的資源,並擷取第一個使用者的 Cookie。

如果應用程式未設定 Cache-Control 回應標頭,伺服器可能會將其設為 private,並新增 Vary: Accept-Encoding 標頭。

如要進一步瞭解快取功能,包括 Google 前端支援的 Vary 值清單,請參閱「回應快取」一文。

Content-Encoding

視要求標頭和回應 Content-Type 而定,伺服器可能會自動壓縮回應主體,如上所述。在本例中,它會新增 Content-Encoding: gzip 標頭,指出主體已壓縮。詳情請參閱「回應壓縮」一節。

Content-LengthTransfer-Encoding

伺服器一律會忽略應用程式傳回的 Content-Length 標頭。並將 Content-Length 設為內文長度 (如已壓縮,則為壓縮後的長度) 或刪除 Content-Length,然後使用區塊傳輸編碼 (新增 Transfer-Encoding: chunked 標頭)。如果為第二代執行階段設定的 Content-Length 不正確,App Engine 會傳回 500 回應。

Date

設為目前的日期和時間。

Server
設為 Google Frontend。開發伺服器會將這個標頭設為 Development/x,其中「x」x是版本號碼。

如果您在登入管理員帳戶的情況下存取網站上的動態頁面,App Engine 會在回應標頭中加入與要求相關的統計資料:

X-Appengine-Resource-Usage
要求使用的資源,包括以毫秒為單位的伺服器端時間。

系統無法快取包含資源使用統計資料的回應。

在應用程式設定檔中設定的回應標頭

您可以在應用程式的設定檔中,依動態和靜態路徑網址設定自訂 HTTP 回應標頭。詳情請參閱設定說明文件http_headers 部分。