beb*_*bbi 7 amazon-web-services cors aws-lambda aws-api-gateway
我已经查看过关于SO的其他相关问题,但这似乎有所不同.事实上,我的问题与此问题非常相似,只是我没有400状态问题.
设置:
部署到阶段:测试
1个资源,1个集成lambda的POST方法.
我已经使用了"启用CORS"选项 - 我尝试在资源和POST请求(以及之后部署API)上应用此选项.
在API GW中,我可以看到Access-Control-Allow-Origin
在POST方法 - 方法响应区域下的200个响应标题中列出.
结果:从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>
Run Code Online (Sandbox Code Playgroud)
回应是:
< 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: *
...
Run Code Online (Sandbox Code Playgroud)
但是使用POST:
curl -X POST -d '{}' -H "Content-Type: application/json" \
-H "Origin: http://example.com" --verbose <endpoint>
Run Code Online (Sandbox Code Playgroud)
它返回:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
Run Code Online (Sandbox Code Playgroud)
和响应json体 - 但没有Access-
任何标题.
我还能检查什么?
beb*_*bbi 18
问题是API网关使用"Lambda Proxy Integration"
选中的选项调用了我的lambda函数.
我相信在向新创建的lambda函数添加API网关触发器时,默认情况下会激活此功能.
在API网关 - 资源 - 方法视图中,"集成响应"框显示为灰色,似乎没有办法(即使对于启用CORS功能)在Access-Control-Allow-Origin
那里添加标题,根据@Abhigna_Nagaraja是必需的.
解决方案:如果使用"Lambda代理集成",请将'Access-Control-Allow-Origin': '*'
标头添加到lambda函数中.
更好的是:在同一视图中 - 集成请求,关闭"Lambda代理集成"并再次启用CORS(之后部署).
(然后,在回调中,您将只返回有效负载json而不是{ statusCode, headers, body }
对象.)
更新:
如果您不确定是否在http状态代码或json有效负载中返回请求响应状态信息,则会进行一些有用的读取:
归档时间: |
|
查看次数: |
9490 次 |
最近记录: |