使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何对 API Gateway 私有集成中的“400 Bad Request(400 错误请求)”错误进行故障排除?

2 分钟阅读
0

我在 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 协议,请完成以下步骤:

  1. 记录内部应用程序负载均衡器或网络负载均衡器的域名。
  2. 登录 API Gateway 控制台
  3. 打开 API 的集成设置以编辑配置。
  4. 使用步骤 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 指标

要关闭失调缓解模式,请完成以下步骤:

  1. 登录 Amazon Elastic Compute Cloud (Amazon EC2) 控制台
  2. 在导航窗格中,选择 Load Balancers(负载均衡器),然后选择要编辑的网络负载均衡器。
  3. 将应用程序负载均衡器的数据包处理更改为防御模式。

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 协议,请完成以下步骤:

  1. 登录 API Gateway 控制台
  2. 打开 API 的集成设置以编辑配置。
  3. 修改端点 URL 以使用 https:// 而不是 http://
  4. 重新部署 API。

**重要事项:**当端点 URL 更改适用于 HTTPS 时,请记住使用您在配置 TLS 侦听器时使用的相应域名。

相关信息

应用程序负载均衡器访问日志

AWS 官方
AWS 官方已更新 1 年前