要求的處理方式

本文件說明您的 App Engine 應用程式如何接收要求及傳送回應。詳情請參閱要求標頭參考資料

如果您的應用程式使用服務,則可以設定要求的位址,將要求傳送到特定服務或該服務的特定版本。如要進一步瞭解服務的定址功能,請參閱要求的轉送方式一文。

處理要求

您的應用程式負責啟動網路伺服器和處理要求。您可以使用任何適用於您的開發語言的網路架構。

App Engine 會執行應用程式的多個執行個體,每個執行個體都有自己專用的網路伺服器來處理要求。每個要求均有可能轉送至任何一個執行個體,因此來自同一個使用者的連續要求不一定會送到相同的執行個體。執行個體可以並行處理多個要求,而執行個體的數量能夠隨流量自動調整。您也可以在 app.yaml 檔案中設定 max_concurrent_requests 元素,藉此變更執行個體可以處理的並行要求數量。

App Engine 的 Go 執行階段使用標準的 http 套件做為 Go 程式與 App Engine 伺服器之間的介面。當 App Engine 收到應用程式的網路要求時,就會叫用與該要求網址相關聯的 http.Handler

下列示例是一個完整的 Go 應用程式,會向使用者輸出採用硬式編碼的 HTML 字串:


package hello

import (
	"fmt"
	"net/http"
)

func init() {
	http.HandleFunc("/", hello)
}

func hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "<h1>Hello, world</h1>")
}

配額與限制

App Engine 會在流量增加時自動分配資源給您的應用程式,然而這項作業會受到下列限制:

  • App Engine 會針對低延遲時間 (回應要求的時間不到一秒) 的應用程式,保留自動調整資源配置的容量。如為具有高延遲時間 (例如在多個要求中,每個要求的回應時間超過一秒) 及高總處理量的應用程式,則需要白銀級、爍金級或白金級的支援。選用這類支援等級的客戶可與支援代表聯絡,要求提高總處理量上限。

  • 大幅受到 CPU 限制的應用程式可能也會產生一些額外的延遲時間,以便和相同伺服器上的其他應用程式有效率地共用資源。對靜態檔案的要求則不受這些延遲限制。

每個傳送至應用程式的要求均會計入「Requests」(要求) 限制,而回應要求所傳送的資料則會計入「Outgoing Bandwidth (billable)」(連出頻寬 (可計費)) 限制。

HTTP 及 HTTPS (加密連線) 要求均會計入「Requests」(要求)、「Incoming Bandwidth (billable)」(連入頻寬 (可計費)) 及「Outgoing Bandwidth (billable)」(連出頻寬 (可計費)) 的限制。GCP Console 的「Quota」(配額) 詳細資料頁面也會個別回報「Secure Requests」(安全性要求)、「Secure Incoming Bandwidth」(安全連入頻寬) 和「Secure Outgoing Bandwidth」(安全連出頻寬) 的值,以供參考之用。僅有 HTTPS 要求會計入這些值。詳情請參閱配額頁面。

下列限制專門適用於要求處理常式:

要求限制

  • 僅接受上限為 15KB 的要求標頭。
  • 要求的總大小上限為 32MB。
  • 所有 HTTP/2 要求在轉送到應用程式伺服器時,都會被轉譯成 HTTP/1.1 要求。
  • 安全資料傳輸層 (SSL) 連線會在負載平衡器上終止。來自負載平衡器的流量會透過加密通道傳送到執行個體,然後再透過 HTTP 轉送到應用程式伺服器。X-Forwarded-Proto 標頭會清楚標示來源要求是 HTTP 還是 HTTPS。

回應限制

  • 回應會以 64k 區塊進行緩衝。
  • 回應無大小限制。
  • 回應時間以一小時為限。

不支援的 HTTP 要求

App Engine 彈性環境不支援下列功能:

  • 轉送到後端服務的 HTTP/2 流量。
  • 直接存取執行個體的 HTTP 要求。

要求標頭

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

詳情請參閱要求標頭參考資料

要求回應

App Engine 會使用 RequestResponseWriter 呼叫處理常式,然後等候處理常式寫入 ResponseWriter 並回傳。當處理常式回傳時,ResponseWriter 內部緩衝區的資料就會傳送給使用者。

這過程與編寫使用 http 套件的一般 Go 程式幾乎相同。

您產生的回應會受到一些限制,而且在傳回用戶端前可能已經過修改。

停用緩衝

根據預設,所有來自 App Engine 的回應都會在 64k 區塊中進行緩衝。您可以在某些情況下停用緩衝,直接將位元組串流至用戶端。此方法通常適用於使用等待 GET 或伺服器推送事件 (SSE) 的情況。如要停用緩衝,請將 X-Accel-Buffering 回應標頭設為 no

X-Accel-Buffering: no

強制 HTTPS 連線

基於安全性考量,所有應用程式皆應鼓勵用戶端透過 https 連線。您可以使用嚴格傳輸安全性標頭,指示瀏覽器針對指定網頁或整個網域採用 https 而非 http,例如:

Strict-Transport-Security: max-age=31536000; includeSubDomains

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Go 適用的 App Engine 彈性環境