2017-09-28 26 views
1

我有一個Lambda部署在AWS內的API網關後面,並啓用了API緩存。使用API​​網關提供不正確的CORS響應的Lambda

已經使用標準啓用CORS選項,這已在OPTIONS方法創建的報頭映射Access-Control-Allow-Origin: *配置。

但是,當調用API來執行Lambda上的方法時,響應中的Access-Control-Allow-Origin標頭將被設置爲請求中的origin標頭。

這是由於我選擇了啓用API緩存導致了一個問題。

看起來這是導致響應被緩存與域特定的Access-Control-Allow-Origin響應。即不是Access-Control-Allow-Origin: *,而是Access-Control-Allow-Origin: {whatever the origin header of the request was

這導致客戶端的CORS故障。

我找不到有關此行爲的任何文檔以及爲何發生這種情況?

+0

如果您可以導致'Origin'的'Vary'響應頭也被添加到響應中,那麼當'Origin'請求頭的值不同於請求的'Origin'值時,它被高速緩存from,這應該具有導致緩存被跳過的效果,並且會產生新的網絡請求。 請參閱[HTTP規範的相關部分](https://tools.ietf.org/html/rfc7231#section-7.1.4)和[關於'Vary'的MDN文章](https:// developer。 mozilla.org/en-US/docs/Web/HTTP/Headers/Vary)。 – sideshowbarker

+0

當Lambda與API網關一起使用時,我不認爲這是可能的@sideshowbarker。在AWS中設置響應標頭的功能已被刪除。 –

回答

0

CORS響應正在Lambda中生成,而不是API網關。

基於Python的Lambda使用的flask-cors庫設置不正確。

作爲每文檔:

send_wildcard(布爾) - 如果爲True,以及起源參數是*,一個 通配符訪問控制允許來源頭中發送,而不是 請求的來源頭。

默認值:在代碼

CORS(app) 

因此已改爲

CORS(app, send_wildcard=True) 

,我知道得到我想要的行爲,這是對Access-Control-Allow-Origin頭回應爲*

相關問題