<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Symptom
Die Clientanwendung empfängt eine HTTP 400 Bad Request
-Antwort mit der Nachricht
The plain HTTP request was sent to HTTPS port
.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 400 Bad Request
Darauf folgt die folgende HTML-Fehlerseite:
<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>
Mögliche Ursachen
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
HTTP-Anfrage an einen mit TLS konfigurierten virtuellen Host | Der Client sendet eine HTTP-Anfrage an einen virtuellen TLS-Host, der konfiguriert ist | Edge-Nutzer von öffentlichen und privaten Clouds |
HTTP-Anfrage an einen durch TLS konfigurierten Zielendpunkt | HTTP-Anfrage an einen TLS-fähigen Backend-Server im Zielendpunkt. | Edge-Nutzer von öffentlichen und privaten Clouds |
Falsche Zielserverkonfiguration | Der Zielserver ist mit dem sicheren Port 443 konfiguriert, aber SSL ist nicht aktiviert. |
Edge-Nutzer von öffentlichen und privaten Clouds |
Ursache: HTTP-Anfrage an einen mit TLS konfigurierten virtuellen Host
Dieser Fehler tritt auf, wenn ein Client versucht, eine Verbindung zu einer API auf Apigee und den genannten Der virtuelle Host ist für die Verwendung von SSL konfiguriert und erhält stattdessen eine HTTP-Anfrage.
Diagnose
Da dieses Problem auf der <ph type="x-smartling-placeholder"></ph> nach Norden ausgerichtet und die API-Anfragen schlagen an der Interaktion zwischen dem Clientanwendung und Router haben, werden diese Fehlermeldungen nicht im NGINX-Router protokolliert. Zugriffslogs. Daher werden diese Anfragen nicht in Tools wie API-Monitoring und das Trace-Tool.
-
Überprüfen Sie Ihre API-Anfrage und stellen Sie fest, ob Sie eine HTTP-Anfrage für einen Host-Alias senden, der ist so konfiguriert, dass Anfragen nur über den sicheren Port
443
akzeptiert werden. Wenn ja, ist das die Ursache des Problems.Beispiel für eine falsche API-Anfrage:
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>
- In der obigen Beispielanfrage wird eine HTTP-Anfrage an den Host-Alias gesendet.
myorg-test.apigee.net
auf dem sicheren Port443
. Dies ist der Grund für den400 Bad Request
Fehler.
Auflösung
Sie müssen überprüfen, ob der Client HTTP anstelle von HTTPS verwendet, und die richtige Anfrage wie folgt stellen: (siehe unten):
Beispiel für eine API-Anfrage:
curl https://org-test.apigee.net:443/400-demo
oder
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<ph type="x-smartling-placeholder">
Ursache: HTTP-Anfrage an einen mit TLS konfigurierten Zielendpunkt
Dieser Fehler tritt auf, wenn Sie HTTP-Anfragen an ein TLS-fähiges Back-End falsch konfiguriert haben im Zielendpunkt eines API-Proxys.
Diagnose
<ph type="x-smartling-placeholder">Führen Sie die folgenden Schritte aus, um den Fehler mithilfe des Trace-Tools zu diagnostizieren:
- Aktivieren Sie Trace in der Apigee-UI für den betroffenen API-Proxy.
- Stellen Sie Anfragen an den API-Proxy.
- Wählen Sie eine der API-Anfragen aus, die mit dem Antwortcode
400
fehlgeschlagen sind. - Gehen Sie die verschiedenen Phasen durch und ermitteln Sie, wo der Fehler aufgetreten ist.
-
Normalerweise wird die Fehlerantwort
400
vom Back-End-Server angezeigt. Das heißt, Sie sehen die Fehlerantwort400
in der Phase Antwort erhalten vom Zielserver wie unten gezeigt: -
Klicken Sie auf den AX, um den Zielendpunkt zu ermitteln, für den die Anfrage gesendet wurde. (Analytics-Daten aufgezeichnet) im Trace.
- Beachten Sie die URL target.url, die das Protokoll, den Host-Alias des Back-End-Servers
und manchmal auch die Portnummer. Der für die
Die Ziel-URL ist
443
, aber das Protokoll ist HTTP. - Sehen Sie sich die Definition des Zielendpunkts an, um die Konfiguration zu verstehen.
-
Prüfe, ob der Backend-Serverhost sicher ist und einen sicheren Port wie
443
überwacht. Wenn Sie das Protokoll alshttp
im<URL>
-Element verwenden, gibt ist das die Ursache des Problems.Beispielkonfiguration für Zielendpunkt:
<?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>
Das obige Beispiel zeigt, dass Sie das HTTP-Protokoll verwenden, der verwendete Port jedoch sicher ist. Port
443
. Dadurch antwortet der Backend-Server mit400 Bad Request
und die FehlermeldungThe plain HTTP request was sent to HTTPS port
.
Auflösung
-
Wenn Ihr Backend-Server sicher/TLS-fähig ist, achten Sie darauf, dass Sie das Protokoll als
https
im<URL>
-Element des Zielendpunkts, wie in im folgenden Beispiel:Beispielkonfiguration für Zielendpunkt:
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection>
<ph type="x-smartling-placeholder"> -
Wenn Ihr Back-End-Server nicht sicher ist, dann:
- Erwähnen Sie nicht die Nummer des sicheren Ports wie
443
. - Sie müssen die Portnummer überhaupt nicht angeben, wenn Ihr Backend-Server ein nicht sicherer Standardport
- Geben Sie die Portnummer an, wenn Sie einen anderen nicht sicheren Port verwenden. Beispiel:
9080
Beispielkonfiguration für Zielendpunkt:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection>
- Erwähnen Sie nicht die Nummer des sicheren Ports wie
Ursache: Falsche Zielserverkonfiguration
Wenn der Zielserver mit einem sicheren Port wie 443
konfiguriert ist, ohne die Funktion zu aktivieren
SSL haben, sendet der Message Processor von Apigee Edge HTTP-Anfragen an eine sichere oder
Ein TLS-konfigurierter Zielserver, der zu diesem Problem führt.
Diagnose
<ph type="x-smartling-placeholder">Führen Sie die folgenden Schritte aus, um den Fehler mithilfe des Trace-Tools zu diagnostizieren:
- Aktivieren Sie Trace in der Apigee-UI für den betroffenen API-Proxy.
- Stellen Sie Anfragen an den API-Proxy.
- Wählen Sie eine der API-Anfragen aus, für die der Antwortcode
400
zurückgegeben wurde. - Gehen Sie die verschiedenen Phasen durch und ermitteln Sie, wo der Fehler aufgetreten ist.
-
Normalerweise wird die Fehlerantwort
400
vom Back-End-Server angezeigt. Das heißt, Sie sehen die Fehlerantwort400
in der Phase Antwort erhalten vom Zielserver wie unten gezeigt: -
Klicken Sie auf den AX, um den Zielendpunkt zu ermitteln, für den die Anfrage gesendet wurde. (Analytics-Daten aufgezeichnet) im Trace.
-
Beachten Sie den Namen target.name, der den Namen des Zielendpunkts darstellt.
In der obigen Beispiel-Trace-Datei hat target.name den Wert default. Das bedeutet, dass der für diese Anfrage verwendete Zielendpunkt der Standardwert ist.
-
Sehen Sie sich die Definition des Zielendpunkts an, um die Konfiguration zu verstehen.
Beispielkonfiguration für Zielendpunkt:
<?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>
Das obige Beispiel für eine Zielendpunktkonfiguration zeigt, dass Sie einen Zielserver verwenden. mit dem Namen
faulty-target
. -
Sobald Sie den Namen des Zielservers kennen, können Sie eine der folgenden Methoden verwenden, um überprüfen Sie die Zielserverkonfiguration:
- Edge-Benutzeroberfläche
- Management API
Edge-Benutzeroberfläche
- Gehen Sie zu Apigee Edge > Verwaltung > Umgebungen > Zielserver.
- Wählen Sie den vom API-Proxy angegebenen Zielserver aus und klicken Sie auf Bearbeiten.
- Prüfen Sie den für den Zielserver angegebenen Port und die SSL-Informationen.
-
Wenn der Zielserver mit einem sicheren Port konfiguriert ist (z. B.
443
), aber SSL nicht aktiviert ist, ist das die Ursache des Problems.Wie Sie im Screenshot oben sehen können, wird als Port
443
verwendet, SSL ist jedoch nicht für diesen Port in der Zielserverkonfiguration aktiviert ist. Dies führt zur Meldung von Apigee Edge Prozessor zum Senden von HTTP-Anfragen an den sicheren Port443
. Daher erhalten Sie die Fehler400 Bad Request
mit der MeldungThe plain HTTP request was sent to HTTPS port
.
Management API
-
Führen Sie den <ph type="x-smartling-placeholder"></ph> Zielserver-API abrufen, um Details zur spezifischen Zielserverkonfiguration abzurufen wie unten dargestellt:
Public Cloud-Nutzer:
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"
Private Cloud-Nutzer:
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"
- Prüfen Sie den für den Zielserver angegebenen Port und die SSL-Informationen.
-
Wenn der Zielserver mit einem sicheren Port konfiguriert ist (z. B.
443
), aber wenn der AbschnittSSLInfo
nicht definiert oder nicht aktiviert ist, dieses Problem.Beispiel für eine Zielserverkonfiguration:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }
In der obigen Beispielausgabe sehen wir, dass der für die Zielverbindung verwendete Port
443
, aber es gibt keinenSSLInfo
-Konfigurationsblock.Dies führt dazu, dass der Message Processor von Apigee Edge HTTP-Anfragen an den sicheren Port sendet
443
Daher wird der Fehler400 Bad Request
mit der Meldung angezeigt,The plain HTTP request was sent to HTTPS port
.
Auflösung
Wenn Ihr Zielserver sicher oder TLS-konfiguriert ist, müssen Sie SSL für den jeweiligen Zielserver.
Dazu können Sie eine der folgenden Optionen verwenden:
- Edge-Benutzeroberfläche
- Management API
Edge-Benutzeroberfläche
- Navigieren Sie zum Zielserver über Edge UI > Verwaltung > Umgebungen > Zielserver.
- Wählen Sie den gewünschten Zielserver aus und klicken Sie auf Bearbeiten.
- Wenn Ihr Zielserver sicher ist und einen Port wie
443
verwendet, aktivieren Sie SSL, indem Sie das Kontrollkästchen neben der SSL-Option. - Konfigurieren Sie Truststore, Ciphers und Protokolle. (Nur falls erforderlich)
Management API
Konfigurieren Sie den Zielserver mithilfe der Verwaltungs-API wie in den <ph type="x-smartling-placeholder"></ph> Aktualisieren Sie die Dokumentation zur Zielserverkonfiguration.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support.
- Wenn Sie ein Nutzer von Public Cloud sind, geben Sie die folgenden Informationen an:
<ph type="x-smartling-placeholder">
- </ph>
- Name der Organisation
- Name der Umgebung
- Name des API-Proxys
- Führen Sie den curl-Befehl aus, um den Fehler zu reproduzieren.
- Trace-Tool-Ausgabe (falls Sie bei der fehlgeschlagenen Anfrage erfassen konnten)
- Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
<ph type="x-smartling-placeholder">
- </ph>
- Vollständige Fehlermeldung erkannt
- Name der Umgebung
- API-Proxy-Bundle
- Zielserverdefinition (wenn Sie einen Zielserver an Ihrem Endpunkt verwenden)
- Trace-Tool-Ausgabe (falls Sie bei der fehlgeschlagenen Anfrage erfassen konnten)