我在 Amazon API Gateway 中使用私有集成功能调用 API 时收到“400 Bad Request”错误。
解决方法
当 API Gateway 私有集成存在配置问题时,会出现“400 Bad Request”错误。
HTTP API
应用程序负载均衡器或在 HTTPS 或 TLS 端口上配置侦听器的网络负载均衡器收到请求
默认情况下,HTTP API 的私有集成使用 HTTP 协议。如果您配置了 HTTPS 或 TLS 侦听器,则负载均衡器会期望接收 HTTPS 请求而不是 HTTP 请求。这会导致以下错误:
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>
对于 HTTPS 或 TLS 侦听器,必须在 TLS 配置中指定服务器名称。要配置 HTTPS 协议,请完成以下步骤:
- 记录内部应用程序负载均衡器或网络负载均衡器的域名。
- 打开 API Gateway 控制台。
- 打开 API 的集成设置以编辑配置。
- 使用步骤 1 中的域名指定 TLS 配置的服务器名称。
- (可选)如果您关闭了自动部署,请重新部署 API。
失调缓解模式设置为最严格
HTTP API 允许私有集成或虚拟私有云 (VPC) 链接集成使用应用程序负载均衡器。如果正确配置 API Gateway 后,应用程序负载均衡器的失调缓解模式设置为 strictest(最严格),则会收到以下错误:
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
</body>
</html>
失调缓解模式可保护您的应用程序免受 HTTP 失调引起的问题影响。有关详细信息,请查看应用程序负载均衡器指标 DesyncMitigationMode_NonCompliant_Request_Count。
要关闭失调缓解模式,请完成以下步骤:
- 打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。
- 在导航窗格中,选择 Load Balancers(负载均衡器),然后选择要编辑的网络负载均衡器。
- 选择 Actions(操作),然后选择 Edit load balancer attributes(编辑负载均衡器属性)。
- 对于 Packet handling(数据包处理),选择 Defensive(防御)。
- 选择 Save changes(保存更改)。
REST API
在 TLS 端口上配置侦听器的网络负载均衡器收到请求
配置有 TLS 侦听器的网络负载均衡器期望来自上游服务的 HTTPS 请求。如果您在 REST API 配置中将 HTTP URL 指定为集成端点 URL,则请求会失败并显示以下错误:
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>
要配置 HTTPS 协议,请完成以下步骤:
- 打开 API Gateway 控制台。
- 打开 API 的集成设置以编辑配置。
- 修改端点 URL 以使用 https:// 而不是 http://。
- 重新部署 API。
**重要事项:**当端点 URL 更改适用于 HTTPS 时,请确保使用您在配置 TLS 侦听器时使用的相同域名。
相关信息
如何将 API Gateway REST API 与应用程序负载均衡器进行集成?
如何删除我的 Amazon Gateway REST API 的 Amazon VPC 链接?