Ir para o conteúdo

Como soluciono erros “400 Bad Request” em uma integração privada do API Gateway?

3 minuto de leitura
0

Recebo o erro “400 Bad Request” quando chamo minha API com integração privada no Amazon API Gateway.

Resolução

O erro “400 Bad Request” ocorre quando há problemas de configuração com uma integração privada do API Gateway.

APIs HTTP

Um Application Load Balancer ou um Network Load Balancer com um receptor configurado em uma porta HTTPS ou TLS recebe uma solicitação

Por padrão, as integrações privadas para APIs HTTP usam o protocolo HTTP. Se você tiver um receptor HTTPS ou TLS configurado, o balanceador de carga espera solicitações HTTPS em vez de solicitações HTTP. Isso resulta no seguinte erro:

<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>

Para um receptor HTTPS ou TLS, você deve especificar um nome de servidor na configuração TLS. Para configurar o protocolo HTTPS, conclua as seguintes etapas:

  1. Registre o nome de domínio do Application Load Balancer ou do Network Load Balancer interno.
  2. Abra o console do API Gateway.
  3. Abra as configurações de integração da API para editar a configuração.
  4. Use o nome de domínio da etapa 1 para especificar o nome do servidor para a configuração TLS.
  5. (Opcional) Se você desativou as implantações automáticas, reimplante a API.

O modo de migração dessincronizada está definido como o mais estrito

As APIs HTTP permitem a integração privada ou a integração de links de nuvem privada virtual (VPC) para usar um Application Load Balancer. Se seu modo de mitigação de dessincronização do Application Load Balancer estiver definido como o mais estrito quando seu API Gateway estiver configurado corretamente, você receberá o seguinte erro:

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
</body>
</html>

O modo de mitigação de dessincronização protege sua aplicação contra problemas causados pela dessincronização HTTP. Para obter mais informações, consulte a métrica DesyncMitigationMode_NonCompliant_Request_Count do Application Load Balancer.

Para desativar o modo de mitigação de dessincronização, conclua as seguintes etapas:

  1. Abra o console do Amazon Elastic Compute Cloud (Amazon EC2).
  2. No painel de navegação, selecione Balanceadores de carga e selecione o Network Load Balancer que você deseja editar.
  3. Clique em Ações e, em seguida, selecione Editar atributos do balanceador de carga.
  4. Em Tratamento de pacotes, clique em Defensivo.
  5. Selecione Salvar alterações.

APIs REST

Um Network Load Balancer com um receptor configurado em uma porta TLS recebe uma solicitação

Os Network Load Balancers configurados com um receptor TLS esperam solicitações HTTPS do serviço upstream. Se você especificar o URL HTTP como um URL de endpoint de integração na configuração da API REST, as solicitações falharão com o seguinte erro:

<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>

Para configurar o protocolo HTTPS, conclua as seguintes etapas:

  1. Abra o console do API Gateway.
  2. Abra as configurações de integração da API para editar a configuração.
  3. Modifique o URL do endpoint para usar https:// em vez de http://.
  4. Reimplante a API.

Importante: quando as alterações de URL do endpoint se aplicarem ao HTTPS, certifique-se de usar o mesmo nome de domínio que você usou ao configurar o receptor TLS.

Informações relacionadas

Como integro uma API REST do API Gateway com um Application Load Balancer?

Como posso excluir um link da Amazon VPC da minha API REST do Amazon Gateway?