我在 Amazon API Gateway 中使用私有集成功能调用 API 时收到“400 Bad Request(400 错误请求)”错误。
解决方法
当 HTTP 和 REST API 请求中出现配置错误时,就会出现“400 Bad Request(400 错误请求)”错误。
HTTP API
应用程序负载均衡器或在 HTTPS 或 TLS 端口上配置侦听器的网络负载均衡器收到请求
默认情况下,HTTP API 的私有集成使用 HTTP 协议。但是,如果您配置了 HTTPS 或 TLS 侦听器,则负载均衡器会改为期望接收 HTTPS 请求。这会导致以下错误:
<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 配置的服务器名称。
**注意:**有关详细信息,请参阅集成的 TLS 配置。
失调缓解模式设置为最严格
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 CloudWatch 指标。
要关闭失调缓解模式,请完成以下步骤:
- 登录 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。
- 在导航窗格中,选择 Load Balancers(负载均衡器),然后选择要编辑的网络负载均衡器。
- 将应用程序负载均衡器的数据包处理更改为防御模式。
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 侦听器时使用的相应域名。
相关信息
应用程序负载均衡器访问日志