Le message d'erreur « 400 Requête erronée » s'affiche lorsque j'appelle mon API avec intégration privée dans Amazon API Gateway.
Résolution
Les erreurs « 400 Requête erronée » se produisent lorsque les requêtes d'API HTTP et REST contiennent des erreurs de configuration.
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. Toutefois, si vous avez configuré un écouteur HTTPS ou TLS, l'équilibreur de charge attend plutôt des requêtes HTTPS. 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 :
- Enregistrez le nom de domaine de l’Application Load Balancer ou du Network Load Balancer.
- Connectez-vous à la console API Gateway.
- Ouvrez les paramètres d'intégration de l'API pour modifier la configuration.
- Utilisez le nom de domaine de l'étape 1 pour spécifier le nom du serveur pour la configuration TLS.
Remarque : Pour plus d'informations, consultez la ](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-extensions-integration-tls-config.html)configuration TLS de l'intégration[.
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) à l'aide d'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 les informations relatives au mode dans les journaux d'accès de votre Application Load Balancer ou vérifiez la métrique DesyncMitigationMode_NonCompliant_Request_Count Amazon CloudWatch.
Pour désactiver le mode d'atténuation de la désynchronisation, procédez comme suit :
- Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2).
- Dans le volet de navigation, sélectionnez Équilibreurs de charge, puis sélectionnez le Network Load Balancer que vous souhaitez modifier.
- Changez la gestion des paquets de l'Application Load Balancer en mode défensif.
API REST
Un Network Load Balancer doté d'un écouteur configuré sur un port TLS reçoit une requête
Lorsqu'un Network Load Balancer est configuré avec un écouteur TLS, l'équilibreur de charge attend des requêtes HTTPS de la part du service en amont. Dans la configuration de l'API REST, si vous mentionnez une URL HTTP comme URL de point de terminaison d'intégration, la requête est rejetée avec la réponse 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 :
- Connectez-vous à la console API Gateway.
- Ouvrez les paramètres d'intégration de l'API pour modifier la configuration.
- Modifiez l'URL du point de terminaison pour utiliser https:// au lieu de http://.
- Redéployez l’API.
Important : Lorsque des modifications de l'URL du point de terminaison s'appliquent au protocole HTTPS, n'oubliez pas d'utiliser le nom de domaine correspondant que vous avez utilisé lors de la configuration de l'écouteur TLS.
Informations connexes
Journaux d'accès à votre Application Load Balancer