Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Aplikasi klien menerima respons HTTP 400 Bad Request
dengan pesan tersebut
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 ini:
<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 berlaku untuk |
---|---|---|
Permintaan HTTP ke host virtual yang dikonfigurasi TLS | Klien mengirim 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 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 {i>host<i} virtual dikonfigurasi untuk menggunakan SSL dan menerima permintaan HTTP sebagai gantinya.
Diagnosis
Karena masalah ini terjadi di Endpoint arah utara dan permintaan API gagal di interaksi titik entri antara aplikasi klien dan Router, pesan error ini tidak dicatat di router NGINX log akses. Oleh karena itu, permintaan ini tidak akan ditangkap dalam alat seperti Pemantauan API dan alat Trace.
-
Verifikasi permintaan API Anda dan lihat apakah Anda membuat permintaan HTTP untuk alias host yang dikonfigurasi untuk menerima permintaan hanya pada port aman
443
. Jika ya, maka itulah penyebab masalah.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.net
pada port aman443
. Ini adalah penyebab400 Bad Request
error.
Resolusi
Anda perlu memverifikasi apakah klien menggunakan HTTP, bukan HTTPs dan membuat permintaan yang benar yang ditampilkan di bawah ini:
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 backend yang mengaktifkan TLS server tertentu di titik akhir target Proxy API.
Diagnosis
Gunakan langkah-langkah berikut untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan Trace di UI Apigee untuk Proxy API yang terpengaruh.
- Membuat permintaan ke Proxy API.
- Pilih salah satu permintaan API yang gagal dengan kode respons
400
. - Lihat berbagai fase dan tentukan di mana kegagalan terjadi.
-
Biasanya Anda akan melihat respons error
400
yang berasal dari server backend. Artinya, Anda akan melihat respons error400
di fase Respons diterima dari server target seperti yang ditunjukkan di bawah ini: -
Tentukan endpoint target yang dibuatkan permintaan dengan mengklik AX (Data Analytics Direkam) di rekaman aktivitas.
- Perhatikan target.url, yang berisi protokol, alias host server backend,
dan terkadang nomor port. Porta yang digunakan untuk
URL targetnya adalah
443
tetapi protokolnya adalah HTTP. - Tinjau definisi endpoint target untuk memahami konfigurasinya.
-
Pastikan host server backend aman dan memproses port aman seperti
443
. Jika Anda menggunakan protokol sebagaihttp
dalam elemen<URL>
, 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 porta yang digunakan aman port
443
. Hal ini menyebabkan server backend merespons dengan400 Bad Request
dan pesan errorThe plain HTTP request was sent to HTTPS port
.
Resolusi
-
Jika server backend aman/TLS, pastikan Anda menggunakan protokol tersebut
https
di elemen<URL>
endpoint target seperti yang ditunjukkan pada 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 non-aman standar
- Cantumkan nomor port jika Anda menggunakan port tidak aman lainnya, 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 salah
Jika server target dikonfigurasi dengan port aman seperti 443
tanpa mengaktifkan
SSL, lalu menyebabkan Pemroses Pesan Apigee Edge mengirim permintaan HTTP ke jaringan
Server target yang dikonfigurasi TLS yang menyebabkan masalah ini.
Diagnosis
Gunakan langkah-langkah berikut untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan Trace di UI Apigee untuk Proxy API yang terpengaruh.
- Membuat permintaan ke Proxy API.
- Pilih salah satu permintaan API yang gagal dengan kode respons
400
. - Lihat berbagai fase dan tentukan di mana kegagalan terjadi.
-
Biasanya Anda akan melihat
400
respons error yang berasal dari server backend. Anda akan melihat respons error400
di fase Respons diterima dari server target seperti yang ditunjukkan di bawah ini: -
Tentukan endpoint target yang dibuatkan permintaan dengan mengklik AX (Data Analytics Direkam) di rekaman aktivitas.
-
Catat target.name, yang mewakili nama endpoint target.
Dalam contoh file rekaman aktivitas di atas, target.name bersifat default. Hal ini menunjukkan bahwa endpoint target yang digunakan untuk permintaan ini adalah {i>default<i}.
-
Tinjau definisi endpoint target untuk memahami konfigurasinya.
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>
Konfigurasi endpoint target contoh di atas menunjukkan bahwa Anda menggunakan server target bernama
faulty-target
. -
Setelah Anda memiliki nama server target, Anda dapat menggunakan salah satu metode berikut untuk periksa konfigurasi server target:
- UI Edge
- Management API
UI Edge
- Buka Apigee Edge > Admin > Lingkungan > Server Target.
- Pilih server target spesifik yang diidentifikasi dari proxy API, lalu klik Edit.
- Verifikasi port yang ditentukan untuk server target dan informasi SSL.
-
Jika server target dikonfigurasi dengan port aman (misalnya:
443
), tapi SSL tidak diaktifkan, maka itulah penyebab masalah ini.Seperti yang dapat Anda lihat pada screenshot di atas, port yang digunakan adalah
443
tetapi SSL tidak diaktifkan untuk porta tersebut di konfigurasi server target. Hal ini menyebabkan Pesan Apigee Edge Pemroses untuk mengirim permintaan HTTP ke port aman443
. Oleh karena itu, Anda akan mendapatkan error400 Bad Request
dengan pesanThe plain HTTP request was sent to HTTPS port
.
Management API
-
Jalankan Mendapatkan API server target untuk mendapatkan detail tentang konfigurasi server target tertentu sebagaimana ditunjukkan di bawah ini:
Pengguna Cloud Publik:
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 bagianSSLInfo
tidak ditentukan atau tidak diaktifkan, maka itulah penyebab menyelesaikan masalah ini.Contoh konfigurasi server target:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }
Dalam contoh {i>output<i} di atas, kita dapat melihat bahwa porta yang digunakan untuk koneksi target telah
443
, tetapi tidak ada blok konfigurasiSSLInfo
.Hal ini menyebabkan Pemroses Pesan Apigee Edge mengirim permintaan HTTP ke port aman
443
. Oleh karena itu, Anda akan mendapatkan error400 Bad Request
dengan pesan tersebutThe plain HTTP request was sent to HTTPS port
.
Resolusi
Jika server target aman atau telah dikonfigurasi TLS, Anda harus mengaktifkan SSL untuk server target.
Anda dapat melakukannya menggunakan salah satu opsi berikut:
- UI Edge
- Management API
UI Edge
- Buka server target di Edge UI > Admin > Lingkungan > Server Target.
- Pilih server target tertentu lalu klik Edit.
- Jika server target Anda aman dan menggunakan port seperti
443
, aktifkan SSL dengan memilih kotak centang di sebelah opsi SSL. - Konfigurasikan Truststore, Ciphers, dan Protocols. (Hanya jika diperlukan)
Management API
Gunakan API pengelolaan untuk mengonfigurasi server target seperti yang dijelaskan dalam Memperbarui dokumentasi konfigurasi server target.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, lalu hubungi Dukungan Apigee Edge.
- Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama proxy API
- Menyelesaikan perintah curl untuk mereproduksi error
- Output alat pelacakan (jika Anda dapat menangkap permintaan yang gagal)
- Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap diamati
- Nama lingkungan
- Paket proxy API
- Definisi server target (jika Anda menggunakan server target di endpoint)
- Output alat pelacakan (jika Anda dapat menangkap permintaan yang gagal)