我有一个带有AWS API Gateway和Lambda函数的服务器较少的API。我正在使用自定义授权功能进行授权。标题太大,因此我收到此错误。通常,对于nginx服务器,我会更改nging配置并修复此问题。我不知道如何在 AWS API 网关中解决这个问题。
10MB 有效负载限制适用于消息正文。如果您遇到标头大小的限制,很遗憾,无法配置这些限制。它们在 CloudFront 页面上说明:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html
特别:
自定义标头:标头名称的最大长度为 256 个字符
自定义标头:标头值的最大长度为 2,048 个字符
自定义标头:所有标头值和名称的最大长度为 10,240 个字符
有效负载大小的限制目前无法更改。从 https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html:
10MB 有效负载大小,目前无法更改。
如果您需要更多自定义,您应该在实际服务器上运行您的 API(例如使用 Amazon EC2)。
我发现压缩内容可以解决这个问题(代码灵感来自这篇博客文章 https://techblog.commercetools.com/gzip-on-aws-lambda-and-api-gateway-5170bb02b543)
请参阅使用Typescript的示例:
export async function getResponse(savedItems) {
return new Promise<APIGatewayProxyResult>((resolve, reject) => zlib.gzip(JSON.stringify(savedItems), (error, gzippedResponse) => {
if (error) {
reject(error);
console.error(error);
} else {
const response: APIGatewayProxyResult = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true,
'Content-Encoding': 'gzip',
},
isBase64Encoded: true,
body: gzippedResponse.toString('base64'),
};
console.info(`response statusCode: ${response.statusCode} body length: ${response.body.length}`);
resolve(response);
}
}));
}
如果有人在尝试上传文件时遇到此问题,请确保在 API 的"设置"部分中定义文件类型(在 API 网关中 API 名称下的树中)。在解决此问题时,我们遇到了此错误以及500和502。第一件事是 RDS 设置(我们在尝试编辑时调用读取器实例,而不是编写器)。接下来是我们的 API 设置中缺少的文件类型。这两个变化使我们达到了 200 - 所以请记住,413 错误有点欺骗性。对于上下文,我们将 API 网关与 Web 应用程序中的 lambda 函数一起使用。我希望这对某人有所帮助!
老问题,但是如果你在后端使用带有bodyParser中间件的Express JS,这可能是阻止你的原因。您可以通过在传递给 bodyParser的配置对象中定义 limit
属性来更新大小限制:
app.use(express.json({ limit: '200kb' }));
您可以将值更改为适合您需求的任何值,文档在这里。