Aparece el error «400 Bad Request» cuando llamo a mi API con integración privada en Amazon API Gateway.
Resolución
El error «400 Bad Request» se produce cuando hay problemas de configuración con una integración privada de API Gateway.
API HTTP
Un equilibrador de carga de aplicación o un equilibrador de carga de red con un agente de escucha configurado en un puerto HTTPS o TLS recibe una solicitud
De forma predeterminada, las integraciones privadas para las API HTTP utilizan el protocolo HTTP. Si tienes un agente de escucha HTTPS o TLS configurado, el equilibrador de carga espera solicitudes HTTPS en lugar de solicitudes HTTP. Esto produce el siguiente error:
<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 un agente de escucha HTTPS o TLS, debes especificar un nombre de servidor en la configuración de TLS. Para configurar el protocolo HTTPS, sigue estos pasos:
- Registra el nombre de dominio del equilibrador de carga de aplicación o del equilibrador de carga de red interno.
- Abre la consola de API Gateway.
- Abre los ajustes de integración de la API para editar la configuración.
- Utiliza el nombre de dominio del paso 1 para especificar el nombre del servidor para la configuración de TLS.
- (Opcional) Si has desactivado los despliegues automáticos, vuelve a desplegar la API.
El modo de migración desincronizada está configurado como el más estricto
Las API HTTP permiten la integración privada o la integración de enlaces de nube virtual privada (VPC) para utilizar un equilibrador de carga de aplicación. Si el modo de mitigación de desincronización del equilibrador de carga de aplicación está configurado como el más estricto cuando la puerta de enlace de API está configurada correctamente, recibirás el siguiente error:
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
</body>
</html>
El modo de mitigación de desincronización protege la aplicación de los problemas causados por la desincronización de HTTP. Para obtener más información, consulta la métrica DesyncMitigationMode_NonCompliant_Request_Count del equilibrador de carga de aplicación.
Para desactivar el modo de mitigación de desincronización, sigue estos pasos:
- Abre la consola de Amazon Elastic Compute Cloud (Amazon EC2).
- En el panel de navegación, elige Equilibradores de carga y, a continuación, selecciona el equilibrador de carga de red que deseas editar.
- Selecciona Acciones y, a continuación, elige Editar atributos del equilibrador de carga.
- En Gestión de paquetes, elige Defensivo.
- Selecciona Guardar cambios.
API de REST
Un equilibrador de carga de red con un agente de escucha configurado en un puerto TLS recibe una solicitud
Los equilibradores de carga de red configurados con un agente de escucha TLS esperan las solicitudes HTTPS del servicio ascendente. Si especificas la URL HTTP como URL de punto de enlace de integración en la configuración de la API de REST, las solicitudes fallan con el siguiente error:
<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 el protocolo HTTPS, sigue estos pasos:
- Abre la consola de API Gateway.
- Abre los ajustes de integración de la API para editar la configuración.
- Modifica la URL del punto de enlace para usar https:// en lugar de http://.
- Vuelve a desplegar la API.
Importante: Cuando los cambios en la URL del punto de enlace se apliquen a HTTPS, asegúrate de utilizar el mismo nombre de dominio que utilizaste al configurar el agente de escucha de TLS.
Información relacionada
¿Cómo puedo integrar una API de REST de API Gateway con un equilibrador de carga de aplicación?
¿Cómo puedo eliminar un enlace de Amazon VPC para mi API de REST de Amazon Gateway?