Salta al contenuto

Come posso risolvere gli errori "400 Bad Request" in un'integrazione privata di Gateway API?

3 minuti di lettura
0

Quando chiamo la mia API con integrazione privata in Gateway Amazon API, ricevo l'errore "400 Bad Request".

Risoluzione

L'errore "400 Bad Request" si verifica quando sono presenti problemi di configurazione con un'integrazione privata di Gateway API.

API HTTP

Un Application Load Balancer o un Network Load Balancer con un listener configurato su una porta HTTPS o TLS riceve una richiesta

Per impostazione predefinita, le integrazioni private per le API HTTP utilizzano il protocollo HTTP. Se hai configurato un listener HTTPS o TLS, il bilanciatore del carico si aspetta richieste HTTPS anziché richieste HTTP. Il risultato è il seguente errore:

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

Per un listener HTTPS o TLS, devi specificare un nome di server nella configurazione TLS. Per configurare il protocollo HTTPS, completa i seguenti passaggi:

  1. Registra il nome di dominio dell'Application Load Balancer o del Network Load Balancer interno.
  2. Apri la console Gateway API.
  3. Apri le impostazioni di integrazione dell'API per modificare la configurazione.
  4. Utilizza il nome di dominio del passaggio 1 per specificare il nome del server per la configurazione TLS.
  5. (Facoltativo) Se hai disattivato le distribuzioni automatiche, ridistribuisci l'API.

La modalità di mitigazione desincronizzata è impostata su Strictest

Le API HTTP consentono l'integrazione privata o l'integrazione del collegamento con un cloud privato virtuale (VPC) per utilizzare un Application Load Balancer. Se la modalità di mitigazione desincronizzata dell'Application Load Balancer è impostata su Strictest quando Gateway API è configurato correttamente, ricevi il seguente errore:

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

La modalità di mitigazione desincronizzata protegge l'applicazione dai problemi causati dalla desincronizzazione HTTP. Per ulteriori informazioni, controlla la metrica dell'Application Load Balancer DesyncMitigationMode_NonCompliant_Request_Count.

Per disattivare la modalità di mitigazione desincronizzata, completa i seguenti passaggi:

  1. Apri la console Amazon Elastic Compute Cloud (Amazon EC2).
  2. Nel pannello di navigazione, scegli Bilanciamenti del carico, quindi seleziona il Network Load Balancer che desideri modificare.
  3. Scegli Operazioni, quindi scegli Modifica attributi del sistema di bilanciamento del carico.
  4. Per Gestione dei pacchetti, scegli Difensiva.
  5. Scegli Salva modifiche.

REST API

Un Network Load Balancer con un listener configurato su una porta TLS riceve una richiesta

I Network Load Balancer configurati con un listener TLS si aspettano richieste HTTPS dal servizio upstream. Se specifichi l'URL HTTP come URL dell'endpoint di integrazione nella configurazione della REST API, le richieste hanno esito negativo e ricevi il seguente errore:

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

Per configurare il protocollo HTTPS, completa i seguenti passaggi:

  1. Apri la console Gateway API.
  2. Apri le impostazioni di integrazione dell'API per modificare la configurazione.
  3. Modifica l'URL dell'endpoint per utilizzare https:// anziché http://.
  4. Ridistribuisci l'API.

Importante: quando le modifiche all'URL dell'endpoint si applicano a HTTPS, assicurati di utilizzare lo stesso nome di dominio utilizzato per configurare il listener TLS.

Informazioni correlate

Come posso integrare una REST API di Gateway API con un Application Load Balancer?

Come posso eliminare un collegamento Amazon VPC per la mia REST API di Gateway Amazon?