Passer au contenu

Comment puis-je résoudre les erreurs « 400 Bad Request » dans une intégration privée d'API Gateway ?

Lecture de 4 minute(s)
0

Le message d'erreur « 400 Bad Request » s'affiche lorsque j'appelle mon API avec intégration privée dans Amazon API Gateway.

Résolution

L'erreur « 400 Bad Request » se produit en cas de problèmes de configuration liés à une intégration privée d'API Gateway.

API HTTP

Un Application Load Balancer ou un Network Load Balancer doté d'un écouteur configuré sur un port HTTPS ou TLS reçoit une requête

Par défaut, les intégrations privées des API HTTP utilisent le protocole HTTP. Si vous avez configuré un écouteur HTTPS ou TLS, l'équilibreur de charge attend des requêtes HTTPS plutôt que des requêtes HTTP.. Cela entraîne l'erreur suivante :

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

Pour un écouteur HTTPS ou TLS, vous devez spécifier un nom de serveur dans la configuration TLS. Pour configurer le protocole HTTPS, procédez comme suit :

  1. Enregistrez le nom de domaine de l’Application Load Balancer ou du Network Load Balancer interne.
  2. Ouvrez la console API Gateway.
  3. Ouvrez les paramètres d'intégration de l'API pour modifier la configuration.
  4. Utilisez le nom de domaine de l'étape 1 pour spécifier le nom du serveur pour la configuration TLS.
  5. (Facultatif) Si vous avez désactivé les déploiements automatiques, redéployez l'API.

Le mode de migration de la désynchronisation est défini sur le niveau le plus strict

Les API HTTP permettent une intégration privée ou une intégration de lien de cloud privé virtuel (VPC) pour utiliser un Application Load Balancer. Si le mode d'atténuation de la désynchronisation de votre Application Load Balancer est défini sur le niveau le plus strict lorsque votre API Gateway est correctement configurée, le message d'erreur suivant s'affiche :

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

Le mode d'atténuation de la désynchronisation protège votre application contre les problèmes causés par la désynchronisation HTTP. Pour plus d'informations, consultez la métrique de l’Application Load Balancer DesyncMitigationMode_NonCompliant_Request_Count.

Pour désactiver le mode d'atténuation de la désynchronisation, procédez comme suit :

  1. Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2).
  2. Dans le volet de navigation, sélectionnez Équilibreurs de charge, puis sélectionnez le Network Load Balancer que vous souhaitez modifier.
  3. Sélectionnez Actions, puis Modifier les attributs de l'équilibreur de charge.
  4. Pour Gestion des paquets, sélectionnez Défensif.
  5. Sélectionnez Enregistrer les modifications.

API REST

Un Network Load Balancer doté d'un écouteur configuré sur un port TLS reçoit une requête

Les Network Load Balancers configurés avec un écouteur TLS attendent des requêtes HTTPS du service en amont. Si vous spécifiez l'URL HTTP comme URL du point de terminaison d'intégration dans la configuration de l'API REST, les requêtes échouent avec l'erreur suivante :

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

Pour configurer le protocole HTTPS, procédez comme suit :

  1. Ouvrez la console API Gateway.
  2. Ouvrez les paramètres d'intégration de l'API pour modifier la configuration.
  3. Modifiez l'URL du point de terminaison pour utiliser https:// au lieu de http://.
  4. Redéployez l’API.

Important : Lorsque des modifications de l'URL du point de terminaison s'appliquent au protocole HTTPS, veillez à utiliser le même nom de domaine que celui qui a été utilisé lors de la configuration de l'écouteur TLS.

Informations connexes

Comment intégrer une API REST API Gateway à un Application Load Balancer ?

Comment puis-je supprimer un lien Amazon VPC pour mon API REST Amazon Gateway ?