對所有邊緣函數的限制 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

對所有邊緣函數的限制

下列限制適用於所有邊緣函數,包括 CloudFront 函數和 Lambda @Edge。

AWS 帳戶 擁有權

要將邊函數與 CloudFront 分佈相關聯,該函數和分佈必須由相同的擁有 AWS 帳戶。

將 CloudFront 函數與 @Edge Lambda 結合

下列限制適用於指定的快取行為:

  • 每個事件類型 (檢視器請求、原始伺服器請求、原始伺服器回應和檢視器回應) 只能有一個邊緣函數關聯。

  • 您無法在檢視器事件 (檢視器要求和檢視器回應) 中合併 CloudFront 函數和 Lambda @Edge。

允許邊緣函數的所有其他組合。下表說明了允許的組合。

CloudFront 函数

檢視者請求

檢視者回應

Lambda@Edge

檢視者請求

不允許

不允許

原始伺服器請求

已允許

已允許

原始伺服器回應

已允許

已允許

檢視者回應

不允許

不允許

HTTP 狀態碼

CloudFront 當來源傳回 HTTP 狀態碼 400 或更高版本時,不會呼叫檢視器回應事件的邊緣函式。

CloudFront 會針對所有原始伺服器回應,呼叫原始伺服器回應事件的 Lambda@Edge 函數,包括在原始伺服器傳回 HTTP 狀態碼 400 (或更高值) 時。如需詳細資訊,請參閱 更新原始響應觸發器中的 HTTP 響應

HTTP 標頭

某些 HTTP 標頭不允許使用,這意味著這些標頭不會公開給邊緣函數,且函數無法新增這些標頭。其他標題是只讀的,這意味著函數可以讀取它們,但不能添加,修改或刪除它們。

不允許的標頭

下列 HTTP 標頭不會公開給邊緣函數,且函數無法新增這些標頭。如果您的函數添加了其中一個標頭,則 CloudFront驗證失敗,並將 HTTP 狀態碼 502(錯誤網關) CloudFront 返回給查看器。

  • Connection

  • Expect

  • Keep-Alive

  • Proxy-Authenticate

  • Proxy-Authorization

  • Proxy-Connection

  • Trailer

  • Upgrade

  • X-Accel-Buffering

  • X-Accel-Charset

  • X-Accel-Limit-Rate

  • X-Accel-Redirect

  • X-Amz-Cf-*

  • X-Amzn-Auth

  • X-Amzn-Cf-Billing

  • X-Amzn-Cf-Id

  • X-Amzn-Cf-Xff

  • X-Amzn-Errortype

  • X-Amzn-Fle-Profile

  • X-Amzn-Header-Count

  • X-Amzn-Header-Order

  • X-Amzn-Lambda-Integration-Tag

  • X-Amzn-RequestId

  • X-Cache

  • X-Edge-*

  • X-Forwarded-Proto

  • X-Real-IP

唯讀標頭

下列標頭為唯讀的狀態。您的函數可以讀取這些標頭並將其作為函數邏輯的輸入,但無法變更其值。如果您的函數新增或編輯唯讀標頭,則要求 CloudFront 驗證失敗,並將 HTTP 狀態碼 502 (錯誤閘道) CloudFront 傳回給檢視器。

檢視器請求事件中的唯讀標頭

下列標頭在檢視器請求事件中為唯讀的狀態。

  • Content-Length

  • Host

  • Transfer-Encoding

  • Via

原始伺服器請求事件中的唯讀標頭 (僅限 Lambda@Edge)

下列標頭在原始伺服器請求事件中為唯讀的狀態,僅存在於 Lambda@Edge 中。

  • Accept-Encoding

  • Content-Length

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Transfer-Encoding

  • Via

原始伺服器回應事件中的唯讀標頭 (僅限 Lambda@Edge)

下列標頭在原始伺服器回應事件中為唯讀的狀態,僅存在於 Lambda@Edge 中。

  • Transfer-Encoding

  • Via

檢視器回應事件中的唯讀標頭

下列標頭在 CloudFront 函數和 Lambda @Edge 的檢視器回應事件中都是唯讀的。

  • Warning

  • Via

下列標頭在 Lambda@Edge 檢視器回應事件中為唯讀狀態。

  • Content-Length

  • Content-Encoding

  • Transfer-Encoding

查詢字串

下列限制適用於讀取、更新或在請求 URI 中建立查詢字串的函數。

  • (僅限 Lambda@Edge) 若要存取原始伺服器請求或原始伺服器回應函數中的查詢字串,您的快取政策或原始伺服器請求政策必須針對查詢字串設定為 All (全部)。

  • 函數可以為檢視器請求和原始伺服器請求事件建立或更新查詢字串 (原始伺服器請求事件僅存在於 Lambda@Edge 中)。

  • 函數可以讀取查詢字串,但無法為原始伺服器回應和檢視器回應事件建立或更新查詢字串 (原始伺服器回應事件僅存在於 Lambda@Edge 中)。

  • 如果函數建立或更新查詢字串,將適用下列限制:

    • 查詢字串不可包含空格、控制字元或片段識別碼 (#)。

    • URI 的總大小 (包含查詢字串) 必須小於 8,192 個字元。

    • 我們建議您於 URI 和查詢字串使用 % 編碼。如需詳細資訊,請參閱 URI 和查詢字串編碼

URI

如果函數為請求變更了 URI,這不會改變針對請求進行的快取動作,也不會改變請求轉傳目的地的原始伺服器。

URI 的總大小 (包含查詢字串) 必須小於 8,192 個字元。

URI 和查詢字串編碼

傳遞給邊緣函數的 URI 和查詢字串值是使用 UTF-8 編碼。您的函數應針對其傳回的 URI 和查詢字符串值使用 UTF-8 編碼。百分比編碼與 UTF-8 編碼相容。

下列清單說明如何 CloudFront 處理 URI 和查詢字串值編碼:

  • 當請求中的值是 UTF-8 編碼時,將值 CloudFront 轉發到您的函數而不進行更改。

  • 當請求中的值是 ISO-8859-1 編碼時, CloudFront 將值轉換為 UTF-8 編碼,然後再將它們轉發到函數。

  • 當要求中的值使用其他字元編碼進行編碼時, CloudFront 假設它們是 ISO-8859-1 編碼,並嘗試從 ISO-8859-1 轉換為 UTF-8。

    重要

    轉換後的字元中的值可能是原始伺服器請求的不正確轉譯。這可能會導致函數或原始伺服器產生意外結果。

CloudFront 轉發到原點的 URI 和查詢字符串值取決於函數是否更改值:

  • 如果函數不會變更 URI 或查詢字串,請將要求中收到的值 CloudFront 轉寄至您的來源。

  • 如果函數變更 URI 或查詢字串,則 CloudFront 會轉寄 UTF-8 編碼值。

Microsoft Smooth Streaming

您無法將邊緣函式與您用於串流媒體檔案的 CloudFront 分發搭配使用,而您已轉換為 Microsoft 流暢串流格式的媒體檔案。

標記

您不能將標籤添加到邊緣功能。若要取得有關中標籤的更多資訊 CloudFront,請參閱標記分佈