本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對所有邊緣函數的限制
下列限制適用於所有邊緣函數,包括 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,請參閱標記分佈。