Anda melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Aplikasi klien menerima respons HTTP 400 Bad Request dengan pesan
The plain HTTP request was sent to HTTPS port.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 400 Bad Request
Diikuti oleh halaman error HTML di bawah:
<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>
Kemungkinan penyebab
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Permintaan HTTP ke host virtual yang dikonfigurasi TLS | Klien mengirimkan permintaan HTTP ke host virtual yang dikonfigurasi TLS | Pengguna Edge Public dan Private Cloud |
| Permintaan HTTP ke endpoint target yang dikonfigurasi TLS | Permintaan HTTP dibuat ke server backend yang mendukung TLS di endpoint target. | Pengguna Edge Public dan Private Cloud |
| Konfigurasi server target yang salah | Server target dikonfigurasi dengan port aman 443, tetapi SSL tidak diaktifkan. |
Pengguna Edge Public dan Private Cloud |
Penyebab: Permintaan HTTP ke host virtual yang dikonfigurasi TLS
Error ini terjadi saat klien mencoba terhubung ke API di Apigee dan host virtual yang disebutkan dikonfigurasi untuk menggunakan SSL dan menerima permintaan HTTP.
Diagnosis
Karena masalah ini terjadi di Endpoint utara dan permintaan API gagal pada interaksi titik entri antara aplikasi klien dan Router, pesan error ini tidak dicatat dalam log akses router NGINX. Oleh karena itu, permintaan ini tidak akan diambil di alat seperti Pemantauan API dan alat Pelacakan.
-
Verifikasi permintaan API Anda dan lihat apakah Anda membuat permintaan HTTP untuk alias host yang dikonfigurasi untuk menerima permintaan hanya di port aman
443. Jika ya, itulah penyebab masalahnya.Contoh permintaan API yang salah:
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>
- Dalam contoh permintaan di atas, perhatikan bahwa permintaan HTTP dibuat ke alias host
myorg-test.apigee.netdi port aman443. Hal ini menyebabkan error400 Bad Request
Resolusi
Anda harus memverifikasi apakah klien menggunakan HTTP, bukan HTTPs, dan membuat permintaan yang benar seperti yang ditunjukkan di bawah:
Contoh permintaan API:
curl https://org-test.apigee.net:443/400-demo
atau
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
Penyebab: Permintaan HTTP ke endpoint target yang dikonfigurasi TLS
Error ini terjadi jika Anda salah mengonfigurasi permintaan HTTP ke server backend yang mendukung TLS di endpoint target Proxy API.
Diagnosis
Gunakan langkah-langkah berikut untuk mendiagnosis error menggunakan alat Pelacakan:
- Aktifkan Pelacakan di UI Apigee untuk Proxy API yang terpengaruh.
- Buat permintaan ke Proxy API.
- Pilih salah satu permintaan API yang gagal dengan kode respons
400. - Buka berbagai fase dan tentukan tempat terjadinya kegagalan.
-
Biasanya, Anda akan melihat respons error
400yang berasal dari server backend. Artinya, Anda akan melihat respons error400dalam fase Respons diterima dari server target seperti yang ditunjukkan di bawah:
-
Tentukan endpoint target yang permintaannya dibuat dengan mengklik ikon AX (Data Analytics Tercatat) dalam pelacakan.

- Perhatikan target.url, yang berisi protokol, alias host server backend,
dan terkadang nomor port. Port yang digunakan untuk URL target adalah
443tetapi protokolnya adalah HTTP. - Tinjau definisi endpoint target untuk memahami konfigurasi.
-
Pastikan host server backend aman dan memproses port aman seperti
443. Jika Anda menggunakan protokol sebagaihttpdalam elemen<URL>, maka itulah penyebab masalah ini.Contoh konfigurasi 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>Contoh di atas menunjukkan bahwa Anda menggunakan protokol HTTP, tetapi port yang digunakan adalah port aman port
443. Hal ini menyebabkan server backend merespons dengan400 Bad Requestdan pesan errorThe plain HTTP request was sent to HTTPS port.
Resolusi
-
Jika server backend Anda aman/mendukung TLS, pastikan Anda menggunakan protokol sebagai
httpsdalam elemen<URL>endpoint target seperti yang ditunjukkan dalam contoh berikut:Contoh konfigurasi endpoint target:
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection> -
Jika server backend Anda tidak aman, maka:
- Jangan sebutkan nomor port aman seperti
443. - Anda tidak perlu menyebutkan nomor port sama sekali, jika server backend Anda memproses port standar yang tidak aman
- Sebutkan nomor port jika Anda menggunakan port lain yang tidak aman, misalnya:
9080
Contoh konfigurasi endpoint target:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection> - Jangan sebutkan nomor port aman seperti
Penyebab: Konfigurasi server target yang salah
Jika server target dikonfigurasi dengan port aman seperti 443 tanpa mengaktifkan
SSL, hal ini akan menyebabkan Message Processor Apigee Edge mengirim permintaan HTTP ke server target yang aman atau
dikonfigurasi TLS sehingga menyebabkan masalah ini.
Diagnosis
Gunakan langkah-langkah berikut untuk mendiagnosis error menggunakan alat Pelacakan:
- Aktifkan Pelacakan di UI Apigee untuk Proxy API yang terpengaruh.
- Buat permintaan ke Proxy API.
- Pilih salah satu permintaan API yang gagal dengan kode respons
400. - Buka berbagai fase dan tentukan tempat terjadinya kegagalan.
-
Biasanya, Anda akan melihat respons
400error yang berasal dari server backend. Artinya, Anda akan melihat respons error400dalam fase Respons diterima dari server target seperti yang ditunjukkan di bawah:
-
Tentukan endpoint target yang permintaannya dibuat dengan mengklik ikon AX (Data Analytics Tercatat) dalam pelacakan.

-
Perhatikan target.name, yang mewakili nama endpoint target.
Dalam contoh file pelacakan di atas, target.name adalah default. Hal ini menunjukkan bahwa endpoint target yang digunakan untuk permintaan ini adalah default.
-
Tinjau definisi endpoint target untuk memahami konfigurasi.
Contoh konfigurasi 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>Contoh konfigurasi endpoint target di atas menunjukkan bahwa Anda menggunakan server target bernama
faulty-target. -
Setelah memiliki nama server target, Anda dapat menggunakan salah satu metode berikut untuk memeriksa konfigurasi server target:
- UI Edge
- Management API
UI Edge
- Buka Apigee Edge > Admin > Environments > Target Servers.
- Pilih server target tertentu yang diidentifikasi dari proxy API dan klik Edit.
- Verifikasi port yang ditentukan untuk server target dan informasi SSL.
-
Jika server target dikonfigurasi dengan port aman (misalnya:
443), tetapi SSL tidak diaktifkan, itulah penyebab masalah ini.
Seperti yang dapat Anda lihat di screenshot di atas, port yang digunakan adalah
443, tetapi SSL tidak diaktifkan untuk port tersebut dalam konfigurasi server target. Hal ini menyebabkan Message Processor Apigee Edge mengirim permintaan HTTP ke port aman443. Oleh karena itu, Anda akan mendapatkan error400 Bad Requestdengan pesanThe plain HTTP request was sent to HTTPS port.
Management API
-
Jalankan Get target server API untuk mendapatkan detail tentang konfigurasi server target tertentu seperti yang ditunjukkan di bawah:
Pengguna 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"
Pengguna 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"
- Verifikasi port yang ditentukan untuk server target dan informasi SSL.
-
Jika server target dikonfigurasi dengan port aman (misalnya:
443), tetapi bagianSSLInfotidak ditentukan atau tidak diaktifkan, itulah penyebab masalah ini.Contoh konfigurasi server target:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }Dalam contoh output di atas, kita dapat melihat bahwa port yang digunakan untuk koneksi target adalah
443, tetapi tidak adaSSLInfoblok konfigurasi.Hal ini menyebabkan Message Processor Apigee Edge mengirim permintaan HTTP ke port aman
443. Oleh karena itu, Anda akan mendapatkan error400 Bad Requestdengan pesanThe plain HTTP request was sent to HTTPS port.
Resolusi
Jika server target Anda aman atau dikonfigurasi TLS, Anda harus mengaktifkan SSL untuk server target tertentu.
Anda dapat melakukannya dengan menggunakan salah satu opsi berikut:
- UI Edge
- Management API
UI Edge
- Buka server target di UI Edge > Admin > Environments > Target Servers.
- Pilih server target tertentu dan klik Edit.
- Jika server target Anda aman dan menggunakan port seperti
443, aktifkan SSL dengan mencentang kotak di samping opsi SSL. - Konfigurasi Truststore, Ciphers, dan Protocols. (Hanya jika diperlukan)
Management API
Gunakan management API untuk mengonfigurasi server target seperti yang dijelaskan dalam dokumentasi Mengupdate konfigurasi server target.
Informasi diagnostik yang harus dikumpulkan
Jika masalah berlanjut meskipun setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut lalu hubungi Dukungan Apigee Edge.
- Jika Anda adalah pengguna Public Cloud, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama proxy API
- Perintah curl lengkap untuk mereproduksi error
- Output alat Pelacakan (jika Anda dapat mengambilnya untuk permintaan yang gagal)
- Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati
- Nama lingkungan
- Paket proxy API
- Definisi server target (jika Anda menggunakan server target di endpoint)
- Output alat Pelacakan (jika Anda dapat mengambilnya untuk permintaan yang gagal)