要求的處理方式

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

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

處理要求

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

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

下列範例是非常基本的單一檔案 Flask 應用程式,對於從網路用戶端到根路徑 ('/') 的所有要求,該應用程式都統一用顯示「Hello, World!」訊息的方式回應。

import logging

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return 'Hello World!'

@app.errorhandler(500)
def server_error(e):
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: <pre>{}</pre>
    See logs for full stacktrace.
    """.format(e), 500

if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)

配額與限制

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

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

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

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

HTTP 及 HTTPS (加密連線) 要求均會計入「要求」、「連入頻寬 (可計費)」及「連出頻寬 (可計費)」的限制。GCP 主控台的「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 會使用 Request 呼叫處理常式指令碼,然後等候指令碼傳回結果;所有寫入標準輸出串流的資料會以 HTTP 回應格式送出。

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

停用緩衝

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

X-Accel-Buffering: no

強制 HTTPS 連線

基於安全性考量,所有應用程式皆應鼓勵用戶端透過 https 連線。您可以使用 Strict-Transport-Security 標頭來指示瀏覽器優先透過 https (而非 http) 連線指定網頁或整個網域,例如:

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

您可以使用 flask-talisman 程式庫來設定 HTTP 安全性標頭。

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

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

這個網頁
App Engine flexible environment for Python docs