本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
下列限制適用於所有邊緣函數,包括 CloudFront Functions 和 Lambda@Edge。
主題
AWS 帳戶
擁有權
若要將邊緣函數與 CloudFront 分佈產生關聯,函數和分佈必須由相同的 AWS 帳戶擁有。
結合 CloudFront Functions 與 Lambda@Edge
下列限制適用於指定的快取行為:
-
每個事件類型 (檢視器請求、原始伺服器請求、原始伺服器回應和檢視器回應) 只能有一個邊緣函數關聯。
-
您無法在檢視器事件 (檢視器請求和檢視器回應) 中結合 CloudFront Functions 和 Lambda@Edge。
允許邊緣函數的所有其他組合。下表說明了允許的組合。
CloudFront Functions |
|||
檢視者請求 |
檢視者回應 |
||
Lambda@Edge |
檢視者請求 |
不允許 |
不允許 |
原始伺服器請求 |
已允許 |
已允許 |
|
原始伺服器回應 |
已允許 |
已允許 |
|
檢視者回應 |
不允許 |
不允許 |
HTTP 狀態碼
當原始伺服器傳回 HTTP 狀態碼 400 或更高版本時,CloudFront 不會叫用檢視器回應事件的邊緣函數。
CloudFront 會針對所有原始伺服器回應,呼叫原始伺服器回應事件的 Lambda@Edge 函數,包括在原始伺服器傳回 HTTP 狀態碼 400 (或更高值) 時。如需詳細資訊,請參閱 更新原始伺服器回應觸發條件中的 HTTP 回應。
HTTP 標頭
某些 HTTP 標頭不允許使用,這意味著這些標頭不會公開給邊緣函數,且函數無法新增這些標頭。其他標頭是唯讀的,這表示函數可以讀取它們,但無法新增、修改或刪除它們。
不允許的標頭
下列 HTTP 標頭不會公開給邊緣函數,且函數無法新增這些標頭。如果您的函數新增這些標頭之一,CloudFront 驗證請求會失敗,且 CloudFront 會傳回 HTTP 狀態碼 502 (無效的閘道) 給檢視器。
-
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 驗證,而且 CloudFront 會傳回 HTTP 狀態碼 502 (無效的閘道) 給檢視器。
檢視器請求事件中的唯讀標頭
下列標頭在檢視器請求事件中為唯讀的狀態。
-
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 Functions 與 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 Smooth Streaming 格式的串流媒體檔案。
標記
您無法將標籤新增至邊緣函數。如需在 CloudFront 中標記的詳細資訊,請參閱 標記分佈。