Sie lesen gerade die Apigee Edge -Dokumentation.
Zur
Apigee X -Dokumentation. info
Symptom
Die Clientanwendung erhält die Antwort HTTP 400 Bad Request mit der Meldung
The plain HTTP request was sent to HTTPS port.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 400 Bad Request
Gefolgt von der folgenden 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 TLS-konfigurierten virtuellen Host | Der Client sendet eine HTTP-Anfrage an einen TLS-konfigurierten virtuellen Host. | Nutzer von Edge Public und Private Cloud |
| HTTP-Anfrage an einen TLS-konfigurierten Zielendpunkt | HTTP-Anfrage an einen TLS-fähigen Back-End-Server im Zielendpunkt. | Nutzer von Edge Public und Private Cloud |
| Falsche Zielserverkonfiguration | Der Zielserver ist mit dem sicheren Port 443 konfiguriert, aber SSL ist nicht aktiviert. |
Nutzer von Edge Public und Private Cloud |
Ursache: HTTP-Anfrage an einen TLS-konfigurierten virtuellen Host
Dieser Fehler tritt auf, wenn ein Client versucht, eine Verbindung zu einer API in Apigee herzustellen, und der erwähnte virtuelle Host für die Verwendung von SSL konfiguriert ist, aber stattdessen eine HTTP-Anfrage erhält.
Diagnose
Da dieses Problem am Northbound Endpunkt auftritt und die API-Anfragen am Einstiegspunkt zwischen der Clientanwendung und dem Router fehlschlagen, werden diese Fehlermeldungen nicht in den NGINX-Router Zugriffsprotokollen protokolliert. Daher werden diese Anfragen nicht in Tools wie API Monitoring und dem Trace-Tool erfasst.
-
Prüfen Sie Ihre API-Anfrage und ob Sie eine HTTP-Anfrage für einen Hostalias stellen, der so konfiguriert ist, dass Anfragen nur über den sicheren Port
443akzeptiert werden. Wenn ja, ist dies 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 Hostalias
myorg-test.apigee.netüber den sicheren Port443gesendet. Dies ist die Ursache für den400 Bad RequestFehler.
Auflösung
Sie müssen prüfen, ob der Client HTTP anstelle von HTTPS verwendet, und die richtige Anfrage stellen, wie unten gezeigt:
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
Ursache: HTTP-Anfrage an einen TLS-konfigurierten Zielendpunkt
Dieser Fehler tritt auf, wenn Sie HTTP-Anfragen an einen TLS-fähigen Back-End- Server im Zielendpunkt eines API-Proxys falsch konfiguriert haben.
Diagnose
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- 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
400fehlgeschlagen sind. - Gehen Sie die verschiedenen Phasen durch und ermitteln Sie, wo der Fehler aufgetreten ist.
-
In der Regel stammt die
400-Fehlerantwort vom Back-End-Server. Das heißt, Sie sehen die400-Fehlerantwort in der Phase Response received from target server (Antwort vom Zielserver erhalten), wie unten gezeigt:
-
Ermitteln Sie den Zielendpunkt, für den die Anfrage gestellt wurde, indem Sie im Trace auf das Symbol AX (Analysedaten aufgezeichnet) klicken.

- Notieren Sie sich die target.url, die das Protokoll, den Hostalias des Back-End-Servers und manchmal die Portnummer enthält. Der für die
Ziel-URL verwendete Port ist
443aber das Protokoll ist HTTP. - Prüfen Sie die Definition des Zielendpunkts, um die Konfiguration zu verstehen.
-
Prüfen Sie, ob der Host des Back-End-Servers sicher ist und einen sicheren Port wie
443überwacht. Wenn Sie das Protokoll alshttpim Element<URL>verwenden, ist dies die Ursache für dieses Problem.Beispielkonfiguration des Zielendpunkts :
<?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>Im obigen Beispiel verwenden Sie das HTTP-Protokoll, aber der verwendete Port ist der sichere Port
443. Dadurch antwortet der Back-End-Server mit400 Bad Requestund der FehlermeldungThe plain HTTP request was sent to HTTPS port.
Auflösung
-
Wenn Ihr Back-End-Server sicher/TLS-fähig ist, verwenden Sie das Protokoll als
httpsim<URL>Element des Zielendpunkts, wie in dem folgenden Beispiel gezeigt:Beispielkonfiguration des Zielendpunkts :
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection> -
Wenn Ihr Back-End-Server nicht sicher ist, gilt Folgendes:
- Geben Sie keine sichere Portnummer wie
443an. - Sie müssen die Portnummer überhaupt nicht angeben, wenn Ihr Back-End-Server einen nicht sicheren Standardport überwacht.
- Geben Sie die Portnummer an, wenn Sie einen anderen nicht sicheren Port verwenden, z. B.:
9080
Beispielkonfiguration des Zielendpunkts :
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection> - Geben Sie keine sichere Portnummer wie
Ursache: Falsche Zielserverkonfiguration
Wenn der Zielserver mit einem sicheren Port wie 443 konfiguriert ist, ohne
SSL zu aktivieren, sendet der Message Processor von Apigee Edge HTTP-Anfragen an einen sicheren oder
TLS-konfigurierten Zielserver, was zu diesem Problem führt.
Diagnose
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- 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
400fehlgeschlagen sind. - Gehen Sie die verschiedenen Phasen durch und ermitteln Sie, wo der Fehler aufgetreten ist.
-
In der Regel stammt die
400-Fehlerantwort vom Back-End-Server. Das heißt, Sie sehen die400Fehlerantwort in der Phase Response received from target server (Antwort vom Zielserver erhalten), wie unten gezeigt:
-
Ermitteln Sie den Zielendpunkt, für den die Anfrage gestellt wurde, indem Sie im Trace auf das Symbol AX (Analysedaten aufgezeichnet) klicken.

-
Notieren Sie sich den target.name, der den Namen des Zielendpunkts darstellt.
In der obigen Trace-Datei ist target.name default. Das bedeutet, dass der für diese Anfrage verwendete Zielendpunkt der Standardendpunkt ist.
-
Prüfen Sie die Definition des Zielendpunkts, um die Konfiguration zu verstehen.
Beispielkonfiguration des Zielendpunkts :
<?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>Die obige Beispielkonfiguration des Zielendpunkts zeigt, dass Sie einen Zielserver mit dem Namen
faulty-targetverwenden. -
Sobald Sie den Namen des Zielservers haben, können Sie die Zielserverkonfiguration mit einer der folgenden Methoden prüfen:
- Edge-UI
- Management API
Edge-UI
- Gehen Sie zu Apigee Edge > Verwaltung > Umgebungen > Zielserver.
- Wählen Sie den spezifischen Zielserver aus, der vom API-Proxy identifiziert wurde, 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 (z. B.
443) konfiguriert ist, aber SSL nicht aktiviert ist, ist dies die Ursache für dieses Problem.
Wie Sie im obigen Screenshot sehen, ist der verwendete Port
443, aber SSL ist für diesen Port in der Zielserverkonfiguration nicht aktiviert. Dadurch sendet der Message Processor von Apigee Edge HTTP-Anfragen an den sicheren Port443. Daher erhalten Sie den Fehler400 Bad Requestmit der MeldungThe plain HTTP request was sent to HTTPS port.
Management API
-
Führen Sie die API Zielserver abrufen aus, um die Details zur spezifischen Zielserverkonfiguration zu erhalten wie unten gezeigt:
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 (z. B.
443) konfiguriert ist, aber derSSLInfoAbschnitt nicht definiert oder nicht aktiviert ist, ist dies die Ursache für dieses Problem.Beispielkonfiguration des Zielservers :
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }In der obigen Beispielausgabe sehen wir, dass der für die Zielverbindung verwendete Port
443ist, aber keinSSLInfoKonfigurationsblock vorhanden ist.Dadurch sendet der Message Processor von Apigee Edge HTTP-Anfragen an den sicheren Port
443. Daher erhalten Sie den Fehler400 Bad Requestmit der MeldungThe 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 aktivieren.
Dazu haben Sie folgende Möglichkeiten:
- Edge-UI
- Management API
Edge-UI
- Gehen Sie in der Edge-UI > Verwaltung > Umgebungen > Zielserver zum Zielserver.
- Wählen Sie den spezifischen Zielserver aus und klicken Sie auf Bearbeiten.
- Wenn Ihr Zielserver sicher ist und einen Port wie
443verwendet, aktivieren Sie SSL, indem Sie das Kästchen neben der Option „SSL“ anklicken. - Konfigurieren Sie Truststore, Ciphers und Protocols. (Nur falls erforderlich)
Management API
Konfigurieren Sie den Zielserver mit der Management API, wie in der Dokumentation Zielserverkonfiguration aktualisieren beschrieben.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support.
- Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- Name des API-Proxys
- Vollständiger curl-Befehl zum Reproduzieren des Fehlers
- Ausgabe des Trace-Tools (falls Sie sie für die fehlgeschlagene Anfrage erfassen konnten)
- Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung
- Name der Umgebung
- API-Proxy-Bundle
- Zielserverdefinition (wenn Sie in Ihrem Endpunkt einen Zielserver verwenden)
- Ausgabe des Trace-Tools (falls Sie sie für die fehlgeschlagene Anfrage erfassen konnten)