对于OPTIONS,AWS API网关CORS正常,POST失败
我已经看过其他相关的问题,但这似乎不同。 事实上,我的问题与这个问题非常相似,只是我没有400状态问题。
设置:
部署到阶段:测试
1资源,1个集成了lambda的POST方法。
我已经使用了“启用CORS”选项 - 我已经尝试在资源和POST请求上应用此选项(并在之后部署API)。
在API GW中,我可以看到在POST方法 - 方法响应区下的200个响应头中列出的Access-Control-Allow-Origin
。
结果:在Chrome中通过客户端代码调用端点,OPTIONS通过,但由于缺少Access-Control-Allow-Origin
标头,POST失败。
卷曲:OPTIONS调用
curl -X OPTIONS -H "Access-Control-Request-Method: POST"
-H "Access-Control-Request-Headers: Content-Type"
-H "Origin: http://example.com" --verbose <endpoint>
回应是:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
< Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
< Access-Control-Allow-Methods: POST,OPTIONS
< Access-Control-Allow-Origin: *
...
但用POST:
curl -X POST -d '{}' -H "Content-Type: application/json"
-H "Origin: http://example.com" --verbose <endpoint>
它返回:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
和响应JSON体-但没有Access-
什么头。
我还能检查什么?
问题在于,API网关使用选中的"Lambda Proxy Integration"
选项调用了我的lambda函数。
我相信在将API网关触发器添加到新创建的lambda函数时,默认情况下会激活它。
当在API网关 - 资源 - 方法视图中时,“集成响应”框变灰,看起来没有办法(即使是启用CORS功能)在那里添加Access-Control-Allow-Origin
标头,根据@Abhigna_Nagaraja是必需的。
解决方案:如果使用“Lambda代理集成”,请将'Access-Control-Allow-Origin': '*'
标头添加到您的lambda函数。
更好:在同一视图中 - 集成请求,关闭“Lambda代理集成”并再次启用CORS(之后部署)。
(然后,在回调中,您必须仅返回有效负载json而不是{ statusCode, headers, body }
对象。)
更新 :
如果您不确定是否在http状态代码或json有效内容中返回请求响应状态信息,请使用一些有用的读取:
http状态vs json状态
json状态标准
'启用CORS'选项是一个方便的工具,可以设置所有的集成/方法响应头映射。 如果您单击“启用CORS”,然后添加新资源,则它将不具备所需的设置。 您可以再次点击'启用CORS',或者您可以手动将其设置为
此外,在使用curl测试更改之前,请不要忘记部署API。
链接地址: http://www.djcxy.com/p/48063.html上一篇: AWS API Gateway CORS ok for OPTIONS, fail for POST
下一篇: Is there a conventional way of returning error statuses from JSON web services?