Amazon web services 可以通过API网关获取但不能发布到Lambda。为什么?
下面是客户提出的请求。GET请求成功,但POST请求出错Amazon web services 可以通过API网关获取但不能发布到Lambda。为什么?,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,下面是客户提出的请求。GET请求成功,但POST请求出错 fetch('api/public/libraries/sign-out-discourse', { method: 'GET', // or 'POST' headers: new Headers([ ['Accept', 'application/json'], ['Content-Type', 'application/json'], ['Authorization',
fetch('api/public/libraries/sign-out-discourse', {
method: 'GET', // or 'POST'
headers: new Headers([
['Accept', 'application/json'],
['Content-Type', 'application/json'],
['Authorization', jwtToken],
]),
})
以下是POST请求中的错误:
HTTP/1.1 403 Forbidden
Server: CloudFront
Date: Fri, 05 Oct 2018 08:50:14 GMT
Content-Type: text/html
Content-Length: 694
Connection: keep-alive
X-Cache: Error from cloudfront
Via: redacted
X-Amz-Cf-Id: redacted
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: redacted
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
我试过的
在CloudFront中,我选择了行为->编辑->允许的HTTP方法:GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE。在AWS以某种方式将设置存储在CloudFront缓存中的不太可能的情况下,我利用这个机会使缓存失效
在API Gateway graphical中,我为资源启用了CORS。自从进行此更改后,我重新部署了API
其他调试
curl-X POST API_ENDPOINT返回的错误与从我的应用程序中使用POST调用端点的错误相同。如果您使用的是Lambda代理集成,则需要在响应中提供CORS头,API网关不会为您的POST请求执行此操作
var response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Credentials" : true
},
body: JSON.stringify({"message":"Success"})
}
callback(null, response);
我不使用Lambda代理集成。老实说,我不知道我是否应该这样做。我收集来阅读的是,它是为lambda发送数据到其他lambda的。这不是我的用例。不管是哪种情况,我都试着将你的修改添加到我的Lambda代码中。我仍然收到相同的403错误。您是否尝试过直接调用API网关,即不通过CloudFront调用?不幸的是,我还没有想出如何执行此操作。但是如果我在Lambda接口中创建一个测试事件并运行它,我会得到一个200。在API网关控制台中,转到API>MyAPI>Stages>MyStage,它应该位于页面顶部,调用URL。当我这样做时,我仍然会得到一个错误,但另一个错误是关于授权头的错误。因此,绕过云端肯定可以解决我原来的问题。我的CloudFront配置可能有什么问题?