3

我已經使用POST Lambda代理方法和OPTIONS方法爲CORS頭設置了APIGateway資源。用於Lambda代理的AWS APIGateway CORS不適用

OPTIONS方法返回這些頭:當我打電話了POST端點生成的JavaScript SDK

$ curl -i -X OPTIONS https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/dev/endpoint1 

HTTP/1.1 200 OK 
Content-Type: application/json 
Content-Length: 0 
Connection: keep-alive 
Date: Sat, 18 Feb 2017 17:07:17 GMT 
x-amzn-RequestId: xxxx 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token 
Access-Control-Allow-Methods: POST,OPTIONS 
X-Cache: Miss from cloudfront 
Via: 1.1 xxxx.cloudfront.net (CloudFront) 
X-Amz-Cf-Id: xxxx== 

然而,Chrome瀏覽器控制檯顯示此錯誤:

XMLHttpRequest cannot load https://xxxx.execute-api.eu-central-1.amazonaws.com/dev/endpoint1. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:8080' is therefore not allowed access. 

以及火狐:

Cross-Origin Request Blocked: 
The Same Origin Policy disallows reading the remote resource at https://xxxx.execute-api.eu-central-1.amazonaws.com/dev/endpoint1. 
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 

爲什麼m y CORS頭部沒有考慮到?是否需要更改POST方法設置?

+0

你不能指望CORS一起工作「本地主機」,大概是因爲那是假的,你的瀏覽器知道它。使用'HTTP測試您的網站:// lvh.me'或通過'http:// www.127.0.0.1.xip.io'。這些是localhost的別名,但您的瀏覽器不知道。 –

回答

5

這似乎需要手動添加頭的lambda函數。

在中的NodeJS的情況下的腳本是這樣的:

context.succeed({ 
    "statusCode": 200, 
    "headers": { 
     "X-Requested-With": '*', 
     "Access-Control-Allow-Headers": 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with', 
     "Access-Control-Allow-Origin": '*', 
     "Access-Control-Allow-Methods": 'POST,GET,OPTIONS' 
    }, 
    "body": JSON.stringify(response) 
}) 
0

請檢查以下要點。

  1. 你部署更新的API?
  2. 你爲你的API資源OPTIONS方法?
  3. 你添加的響應頭像下面OPTIONS方法的方法應對?
    • 訪問控制允許報頭
    • 訪問控制允許的方法
    • 訪問控制允許來源
  4. 你執行你的API資源「啓用CORS」行動?
  5. 後完成檢查上述情況,請檢查GET/POST方法的API資源的方法請求。也許,Access-Control-Allow-Origin HTTP標頭是由API網關自動添加的。

感謝, 丹尼爾

相關問題