Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
L'applicazione client riceve una risposta HTTP 400 Bad Request con il messaggio
The plain HTTP request was sent to HTTPS port.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 400 Bad Request
Seguito dalla pagina di errore HTML riportata di seguito:
<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> </body> </html>
Possibili cause
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| Richiesta HTTP a un host virtuale configurato con TLS | Il client invia una richiesta HTTP a un host virtuale configurato con TLS | Utenti di Edge Public Cloud e Private Cloud |
| Richiesta HTTP all'endpoint target configurato con TLS | Richiesta HTTP effettuata a un server di backend abilitato per TLS nell'endpoint target. | Utenti di Edge Public Cloud e Private Cloud |
| Configurazione errata del server target | Il server target è configurato con la porta sicura 443, ma SSL non è abilitato. |
Utenti di Edge Public Cloud e Private Cloud |
Causa: richiesta HTTP a un host virtuale configurato con TLS
Questo errore si verifica quando un client tenta di connettersi a un'API su Apigee e l'host virtuale menzionato è configurato per utilizzare SSL e riceve invece una richiesta HTTP.
Diagnosi
Poiché questo problema si verifica sull'endpoint Northbound e le richieste API non vanno a buon fine nel punto di interazione tra l' applicazione client e il router, questi messaggi di errore non vengono registrati nei log di accesso del router NGINX. Di conseguenza, queste richieste non verranno acquisite in strumenti come il monitoraggio API e lo strumento Trace.
-
Verifica la richiesta API e controlla se stai effettuando una richiesta HTTP per un alias host che è configurato per accettare richieste solo sulla porta sicura
443. In caso affermativo, questa è la causa del problema.Esempio di richiesta API errata:
curl http://org-test.apigee.net:443/400-demo
<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>server</center> </body> </html>
- Nella richiesta di esempio riportata sopra, tieni presente che viene effettuata una richiesta HTTP all'alias host
myorg-test.apigee.netsulla porta sicura443. Questa è la causa dell'400 Bad Requesterrore.
Risoluzione
Devi verificare se il client utilizza HTTP anziché HTTPS ed effettuare la richiesta corretta come mostrato di seguito:
Esempio di richiesta API:
curl https://org-test.apigee.net:443/400-demo
o
curl https://org-test.apigee.net/400-demo
< HTTP/1.1 200 OK < Date: Thu, 25 Feb 2021 13:01:43 GMT < Content-Type: text/xml;charset=UTF-8 < Content-Length: 403 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true
Causa: richiesta HTTP all'endpoint target configurato con TLS
Questo errore si verifica se hai configurato in modo errato le richieste HTTP a un server di backend abilitato per TLS nell'endpoint target di un proxy API.
Diagnosi
Per diagnosticare l'errore utilizzando lo strumento Trace:
- Abilita Trace nell'interfaccia utente di Apigee per il proxy API interessato.
- Effettua richieste al proxy API.
- Seleziona una delle richieste API che non è andata a buon fine con il codice di risposta
400. - Esamina le varie fasi e determina dove si è verificato l'errore.
-
In genere, la risposta di errore
400proviene dal server di backend. Ovvero, vedrai la risposta di errore400nella fase Risposta ricevuta dal server target come mostrato di seguito:
-
Determina l'endpoint target per il quale è stata effettuata la richiesta facendo clic sull'icona AX (Dati di analisi registrati) nella traccia.

- Prendi nota di target.url, che contiene il protocollo, l'alias host del server di backend,
e, a volte, il numero di porta. La porta utilizzata per l'
URL target è
443ma il protocollo è HTTP. - Esamina la definizione dell'endpoint target per comprendere la configurazione.
-
Verifica che l'host del server di backend sia sicuro e che sia in ascolto su una porta sicura come
443. Se utilizzi il protocollo comehttpnell'elemento<URL>, questa è la causa del problema.Esempio di configurazione dell'endpoint target:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:443/get</URL> </HTTPTargetConnection> </TargetEndpoint>L'esempio precedente mostra che stai utilizzando il protocollo HTTP, ma la porta utilizzata è la porta sicura porta
443. In questo modo, il server di backend risponde con400 Bad Requeste il messaggio di erroreThe plain HTTP request was sent to HTTPS port.
Risoluzione
-
Se il server di backend è sicuro/abilitato per TLS, assicurati di utilizzare il protocollo come
httpsnell'elemento<URL>dell'endpoint target, come mostrato in nell'esempio seguente:Esempio di configurazione dell'endpoint target:
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection> -
Se il server di backend non è sicuro:
- Non menzionare il numero di porta sicura, ad esempio
443. - Non devi menzionare il numero di porta, se il server di backend è in ascolto su una porta non sicura standard
- Menziona il numero di porta se utilizzi un'altra porta non sicura, ad esempio:
9080
Esempio di configurazione dell'endpoint target:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection> - Non menzionare il numero di porta sicura, ad esempio
Causa: configurazione errata del server target
Se il server target è configurato con una porta sicura come 443 senza abilitare
SSL, il processore di messaggi di Apigee Edge invia richieste HTTP a un server target sicuro o
configurato con TLS, causando questo problema.
Diagnosi
Per diagnosticare l'errore utilizzando lo strumento Trace:
- Abilita Trace nell'interfaccia utente di Apigee per il proxy API interessato.
- Effettua richieste al proxy API.
- Seleziona una delle richieste API che non è andata a buon fine con il codice di risposta
400. - Esamina le varie fasi e determina dove si è verificato l'errore.
-
In genere, la risposta di errore
400proviene dal server di backend. Ovvero, vedrai la risposta di errore400nella fase Risposta ricevuta dal server target come mostrato di seguito:
-
Determina l'endpoint target per il quale è stata effettuata la richiesta facendo clic sull'icona AX (Dati di analisi registrati) nella traccia.

-
Prendi nota di target.name, che rappresenta il nome dell'endpoint target.
Nel file di traccia di esempio riportato sopra, target.name è default. Ciò indica che l'endpoint target utilizzato per questa richiesta è quello predefinito.
-
Esamina la definizione dell'endpoint target per comprendere la configurazione.
Esempio di configurazione dell'endpoint target:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <LoadBalancer> <Server name="faulty-target"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>La configurazione dell'endpoint target di esempio riportata sopra mostra che stai utilizzando un server target denominato
faulty-target. -
Una volta ottenuto il nome del server target, puoi utilizzare uno dei seguenti metodi per controllare la configurazione del server target:
- Interfaccia utente di Edge
- API di gestione
Interfaccia utente di Edge
- Vai a Apigee Edge > Amministratore > Ambienti > Server target.
- Scegli il server target specifico identificato dal proxy API e fai clic su Modifica.
- Verifica la porta specificata per il server target e le informazioni SSL.
-
Se il server target è configurato con una porta sicura (ad esempio
443), ma SSL non è abilitato, questa è la causa del problema.
Come puoi vedere nello screenshot riportato sopra, la porta utilizzata è
443ma SSL non è abilitato per questa porta nella configurazione del server target. In questo modo, il processore di messaggi di Apigee Edge invia richieste HTTP alla porta sicura443. Di conseguenza, ricevi l' errore400 Bad Requestcon il messaggioThe plain HTTP request was sent to HTTPS port.
API di gestione
-
Esegui l'API Get target server per ottenere i dettagli sulla configurazione del server target specifico come mostrato di seguito:
Utente di Public Cloud:
curl -v 'https://api.enterprise.apigee.com/v1/organizations/ORG_NAME/environments/ENV_NAME>/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
Utente di Private Cloud:
curl -v 'http://MANAGEMENT_IP:8080/v1/organizations/ORG_NAME/environments/ENV_NAME/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
- Verifica la porta specificata per il server target e le informazioni SSL.
-
Se il server target è configurato con una porta sicura (ad esempio
443), ma la sezioneSSLInfonon è definita o non è abilitata, questa è la causa del problema.Esempio di configurazione del server target:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }Nell'output di esempio riportato sopra, possiamo vedere che la porta utilizzata per la connessione target è
443, ma non è presente alcun blocco di configurazioneSSLInfo.In questo modo, il processore di messaggi di Apigee Edge invia richieste HTTP alla porta sicura
443. Di conseguenza, ricevi l'errore400 Bad Requestcon il messaggioThe plain HTTP request was sent to HTTPS port.
Risoluzione
Se il server target è sicuro o configurato con TLS, devi abilitare SSL per il target server specifico.
Puoi farlo utilizzando una delle seguenti opzioni:
- Interfaccia utente di Edge
- API di gestione
Interfaccia utente di Edge
- Vai al server target nell'interfaccia utente di Edge > Amministratore > Ambienti > Server target.
- Scegli il server target specifico e fai clic su Modifica.
- Se il server target è sicuro e utilizza una porta come
443, abilita SSL selezionando la casella di controllo accanto all'opzione SSL. - Configura Truststore, Cifratura e Protocolli. (Solo se necessario)
API di gestione
Utilizza l'API di gestione per configurare il server target come descritto nella Aggiornare la configurazione del server target documentazione.
Informazioni di diagnostica da raccogliere
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e contatta l'assistenza Apigee Edge.
- Se sei un utente di Public Cloud, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome del proxy API
- Comando curl completo per riprodurre l'errore
- Output dello strumento Trace (se sei riuscito ad acquisire la richiesta non riuscita)
- Se sei un utente di Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato
- Nome ambiente
- Bundle del proxy API
- Definizione del server target (se utilizzi il server target nell'endpoint)
- Output dello strumento Trace (se sei riuscito ad acquisire la richiesta non riuscita)