当前位置: 首页 > 知识库问答 >
问题:

AWS API网关选项请求返回500错误

闾丘卓
2023-03-14

我对API网关和Lambda非常陌生。我正在尝试将基于Node.js Express的API部署到lambda。我使用的是AWSlapes中的aws无服务器express示例。因此,我的大部分AWS配置都是自动为我创建的。

似乎我的API通过API网关正常工作。我的post和get方法工作正常。但是,我需要支持CORS。我的应用程序应该返回正确的CORS对选项请求的响应,但它在AWS上不起作用。

最终,无论我做什么,我都会收到500份对选项请求的回复。我还没有弄清楚如何获得关于这500个错误的任何信息。我不确定是什么导致了他们。

这是500响应的主体{“消息”:“内部服务器错误”}

以下是响应标题:

内容-长度: 36

内容类型:application/json

日期:2017年7月9日星期日17:56:24 GMT

现状:500

via:1.1 9af17e5a616bfc9ac07fc7e415ade9e6.cloudfront.net(cloudfront)

x-amz-cf-id:1_-AZMKLQF1RKOG2MRTVCBAE54AIZDPWMNAPBTWG48AF-v_g9WHkZw==

x-amzn-requestid:ec216a62-64cf-11e7-ad2b-4f1e96508dba

x-cache:来自cloudfront的错误

我很确定我的选项请求甚至没有到达Lambda上的应用程序。

我尝试过使用API网关(在我的应用程序中)配置CORS。我正在尝试将其配置为允许所有来源。

如果有什么我可以看或做调试这个问题?

编辑:

为了调试这个问题,我尝试为API网关启用CloudWatch日志。

之后,我在CloudWatch中看到这两个网关日志:

我一直在使用prod,所以我点击那个链接,看到这个:

我假设这是一长串日志条目。我不确定“流”在这种情况下是什么意思。有数百个这样的条目。所以,我选择一个最近的时间戳,然后点击它。现在我看到了这个:

似乎我所有的网关日志都是这样的。IE:显然是空的。

那么,我是否正确设置了日志记录?我找对地方了吗?

共有3个答案

万涵亮
2023-03-14

在使用cloudformation创建无服务器解决方案时,我也遇到了同样的问题。Cloudformation创建了API网关Lambda,一切看起来都正常。但是,选项请求返回内部服务器错误。

我必须去API网关,手动发布我的API只有一次。(即使它已经发布到prod阶段)然后选项请求起作用。我现在可以使用cloudformation进行更新。

万高轩
2023-03-14

我刚刚经历了这个…在AWS lambda文档中隐藏的关于启用CORS的事实是,您必须在lambda中设置CORS头。下面是如何做到这一点:

let payload = {
    statusCode: 400,
    body: JSON.stringify('body'),
    headers: {"Access-Control-Allow-Origin": "*"} // NEED this for API CORS access
};
callback(null, payload);

必须返回有效的状态码和正文以及标题,否则API将无法将lambda响应转换为API响应。

利永年
2023-03-14

我的问题与@scopchanov类似。

在我的AWS Lambda API网关无服务器框架1.42.3 Express.js项目中起作用的是:

>

  • 我必须从Express启用CORS/发送报头:

    //AWS API网关CORS(选项)支持有缺陷吗?app.use(cors({credentials:true}));app.options(“*”,cors());

    不要在API网关中启用CORS,即不要在serverless.yml中启用CORS:

    • http:method:ANY path:{proxy}将导致{“message”:“Internal server error”}cors:true

    如果没有cors:true,所有请求都可以正常工作。

    使用cors:trueOPTIONS请求将响应{“message”:“Internal server error”}(无论Lambda函数做什么,这似乎都是由API网关直接发送的,或者是错误的模拟集成)。

  •  类似资料:
    • 我使用RESTAssured练习web服务。在post请求中,它返回500服务器错误,其中我使用邮差发送请求,没有错误。谁能帮我调试一下这个错误吗?请给点意见。任何帮助都是感激的?提前道谢。 错误消息的状态代码应为<200>,但为<500>。 堆栈跟踪:

    • 我正在使用react.js应用程序调用API。我从AWS API网关收到关于CORS策略的错误: CORS策略阻止从来源“http://localhost:3000”访问位于“https://awsapigatewayid.execute-api.ap-south-1.amazonaws.com/staging/top10”的XMLHttpRequest:飞行前响应中的access-control

    • 我的浏览器控制台上有一个错误:“放置http://localhost:8000/post/2 500(内部服务器错误)” 我使用资源控制器和我的路由-路由e::资源('post','PostController'); 此处为更新帖子的资源控制器代码: 这里我的视图代码: Ajax代码: 顺便说一下,我在文件头上使用了元令牌{{csrf_token()}}。但是我在本地主机上发现了500个内部服务器

    • 两天前,我们的贝宝整合出了问题。不幸的是,尝试联系贝宝支持已经证明没有帮助(没有回复在2天),所以我会尝试我的运气,在这里。 谢谢!

    • 我正在Android系统中进行网络通信项目,但我的应用程序不起作用!经过一些调试,我发现每个网络请求都有来自系统的空响应。 我尝试了很多方法,例如:1)硬重启手机2)将所有网络权限添加到清单文件中 3)使用本地网络(我的手机作为服务器)4)让所有应用程序连接到网络:设置 但!什么也没发生... 这是我的类似问题链接,但在这个主题中没有答案:无法仅在我的Android应用程序中连接到互联网。连接in

    • 问题内容: 这工作正常: 这将返回400 Bad Request(只是使用.ajax来支持错误处理的上述jQuery的重新格式)。 问题答案: 我认为您只需要再添加2个选项(和):