啟用 CORS 支持意味着什么
當瀏覽器接收非簡單 HTTP 請求時,CORS 協議將要求瀏覽器在發送實際請求之前向服務器發送一個預檢請求,並等待服務器的批准(或請求憑證)。預檢請求 將向您的 API 顯示為 HTTP 請求:
-
包含一個
Origin
標頭。 -
使用
OPTIONS
方法。 -
包含以下標頭:
-
Access-Control-Request-Method
-
Access-Control-Request-Headers
-
因此,為了支持 CORS,REST API 資源需要實施一個 OPTIONS
方法,該方法可以響應 OPTIONS
預檢請求,該請求至少具有由 Fetch 標准強制執行的以下響應標頭:
-
Access-Control-Allow-Methods
-
Access-Control-Allow-Headers
-
Access-Control-Allow-Origin
啟用 CORS 支持的方式取決於您的 API 的集成類型。
為模擬集成啟用 CORS 支持
對於模擬集成,您可創建一個 OPTIONS
方法以將所需的響應標頭(具有適當的靜態值)作為方法響應標頭返回,從而啟用 CORS。此外,每個實際啟用了 CORS 的方法還必須在至少其 200 次響應中返回 Access-Control-Allow-Origin:'
標頭,其中標頭鍵的值設置為 request-originating server addresses
''*'
(任何源)或設置為允許訪問該資源的源。
為 Lambda 或 HTTP 非代理集成和 AWS 服務集成啟用 CORS 支持
對於 Lambda 自定義(非代理)集成、HTTP 自定義(非代理)集成或 AWS 服務集成,您可以通過使用 API Gateway 方法響應和集成響應設置來設置所需的標頭。API Gateway 將創建一個 OPTIONS
方法並嘗試將 Access-Control-Allow-Origin
標頭添加到您現有的方法集成響應中。這並不總是有用,有時您需要手動修改集成響應來適當地啟用 CORS。通常,這僅意味着手動修改集成響應將返回 Access-Control-Allow-Origin
標頭。
為 Lambda 或 HTTP 代理集成啟用 CORS 支持
對於 Lambda 代理集成或 HTTP 代理集成,您仍可以在 API Gateway 中設置所需的 OPTIONS
響應標頭。然而,您的后端將負責返回 Access-Control-Allow-Origin
和 Access-Control-Allow-Headers
標頭,因為代理集成不會返回集成響應。
在 GET
方法上啟用 CORS 后,如果資源中沒有 OPTIONS
方法,則該方法將添加到資源中。OPTIONS
方法的 200
響應會自動配置為返回三個 Access-Control-Allow-*
標頭,以完成預檢握手。此外,默認情況下,實際 (GET
) 方法還會配置為在 200 響應內返回 Access-Control-Allow-Origin
標頭。對於其他類型的響應,如果您不希望返回 Cross-origin access
錯誤,您將需要手動對其進行配置,以返回帶有“*”或特定源的 Access-Control-Allow-Origin'
標頭。