Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 500 Internal Server Error dengan
kode error protocol.http.BadPath sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 500 Internal Server Error
Selain itu, Anda mungkin melihat pesan error berikut:
{
"fault":{
"faultstring":"Invalid request path",
"detail":{
"errorcode":"protocol.http.BadPath"
}
}
}Kemungkinan penyebab
Error ini terjadi jika URL permintaan server backend, diwakili oleh variabel alur
target.url,
berisi path yang dimulai dengan tanda tanya (?)
dari garis miring (/), yang tidak valid.
Sesuai dengan spesifikasi RFC 3986, bagian 3: Komponen Sintaksis dan RFC 3986, bagian 3.3: Jalur:
Sintaksis URI memiliki komponen berikut:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment- Komponen
pathwajib dan HARUS diawali dengan dan selalu tambahkan garis miring ke depan (/).
Oleh karena itu, jika URL permintaan server backend memiliki komponen path yang dimulai
dengan tanda tanya (?), bukan garis miring (/), kemudian Apigee
Edge merespons dengan 500 Internal Server Error dan kode error
protocol.http.BadPath.
Misalnya: Jika target.url memiliki nilai
https://www.mocktarget.apigee.net?json, error ini akan terjadi sebagai
path dinyatakan tidak valid, karena diawali dengan tanda tanya
(?) bukan garis miring ke depan (/).
| Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
|---|---|---|
| URL server backend (target.url) memiliki jalur yang tidak valid | Komponen jalur di URL server backend yang diwakili oleh variabel alur
target.url dimulai dengan tanda tanya (?), bukan tanda maju
garis miring (/). |
Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:
Pemantauan API
Prosedur #1: Menggunakan Pemantauan API
Untuk mendiagnosis error menggunakan Pemantauan API:
- Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah tersebut.
- Buka Analyze > Pemantauan API > Investigasi.
- Pilih jangka waktu tertentu saat Anda melihat error.
Gambarkan Kode Kesalahan terhadap Waktu.
Pilih sel dengan kode kesalahan
protocol.http.BadPathseperti yang ditunjukkan di bawah ini:
Informasi tentang kode kesalahan
protocol.http.BadPathditampilkan sebagai yang ditampilkan di bawah ini:
Klik Lihat log , lalu luaskan baris untuk permintaan yang gagal.
- Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
500 - Sumber Kesalahan:
target - Kode Kesalahan:
protocol.http.BadPath
- Kode Status:
- Jika Sumber Kesalahan adalah
targetdan Kode Kesalahan adalahprotocol.http.BadPath, hal ini menunjukkan bahwa URL server backend memiliki jalur tidak valid.
Trace
Prosedur #2: Menggunakan alat Rekaman Aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi rekaman aktivitas dan
- Tunggu hingga error
500 Internal Server Errorterjadi, atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah
500 Internal Server Error
- Tunggu hingga error
Pastikan Tampilkan semua FlowInfos diaktifkan:

- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
- Menavigasi melalui berbagai fase pelacakan dan menemukan tempat terjadinya kegagalan.
Anda akan menemukan error ini biasanya dalam alur setelah Alur Permintaan Target Dimulai seperti yang ditunjukkan di bawah ini:

Perhatikan nilai error dari trace:
error: Jalur permintaan tidak valid
Karena error dimunculkan oleh Apigee Edge setelah Alur Permintaan Target Dimulai Hal ini menunjukkan bahwa URL server backend memiliki jalur tidak valid. Ini akan kemungkinan besar terjadi jika variabel alur
target.url(yang mewakili URL untuk server backend) di Apigee Edge mungkin telah diperbarui dengan jalur yang tidak valid melalui salah satu kebijakan dalam alur permintaan target.- Periksa bagian Variabel Dibaca dan Ditetapkan di setiap alur secara mundur dari alur error menuju fase Alur Permintaan Target Dimulai.
- Tentukan kebijakannya, tempat variabel alur
target.urlberada diperbarui:Contoh rekaman aktivitas yang menunjukkan kebijakan JavaScript memperbarui variabel alur
target.url:
Dalam contoh trace yang ditampilkan di atas, perhatikan nilai variabel variabel flow
target.urldiperbarui dalam kebijakan JavaScript bernamaJS- SetTargetURLsebagai berikut:target.url : https://mocktarget.apigee.net?json - Perhatikan bahwa nilai dalam
target.urlmemiliki komponen berikut:- skema:
https - otoritas:
mocktarget.apigee.net - jalur:
?json
- skema:
- Karena komponen path dimulai dengan tanda tanya (
?) bukan garis miring (/), Anda akan mendapatkan errorInvalid request path. - Buka Fase AX (Data Analytics Direkam) di rekaman aktivitas, lalu klik Fase tersebut.
Scroll ke bawah ke bagian Detail Fase - Header Error, lalu tentukan X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah ini:

Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source masing-masing
protocol.http.BadPathdantarget, menunjukkan bahwa error ini disebabkan karena URL server backend memiliki jalur yang tidak valid.Header respons Nilai X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source target
NGINX
Prosedur #3: Menggunakan log akses NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan
informasi penting tentang HTTP
500 Internal Server Error. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Telusuri apakah ada
500error dengan kode errorprotocol.http.BadPathselama durasi tertentu (jika masalah terjadi di sudah lewat) atau jika ada permintaan yang masih gagal dengan500. Jika Anda menemukan error
500dengan pencocokan X-Apigee-fault-code nilaiprotocol.http.BadPath, lalu tentukan nilai X- Apigee-fault-source.Contoh error 500 dari log akses NGINX:
Contoh entri di atas dari log akses NGINX memiliki nilai berikut untuk X-Apigee- fault-code dan X-Apigee-fault-source:
Header Nilai X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetPerhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source adalah
protocol.http.BadPathdantarget, yang menunjukkan bahwa error ini disebabkan karena URL server backend memiliki jalur tidak valid.
Penyebab: URL server backend (target.url) memiliki jalur yang tidak valid
Diagnosis
- Tentukan Fault Code dan Fault Source untuk
500 Internal Server Errormenggunakan Pemantauan API, Trace Tool, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Jika Kode Kesalahan adalah
protocol.http.BadPathdan Sumber Kesalahan memiliki nilaitarget, maka ini menunjukkan bahwa URL server backend memiliki URL tidak valid jalur. URL server backend direpresentasikan oleh variabel alur
target.urldi Apigee Edge. Error ini biasanya terjadi jika Anda mencoba mengupdate URL server backend (target.url) secara dinamis menggunakan salah satu kebijakan (dalam proxy/alur bersama) di alur permintaan Target, sehingga memiliki jalur yang tidak valid.Tentukan apakah variabel flow
target.urlmemang memiliki tidak valid path dan sumber untuk nilainya menggunakan salah satu metode berikut:Trace
Menggunakan alat Trace
Jika Anda telah merekam aktivitas error ini, gunakan langkah-langkah seperti yang dijelaskan di Menggunakan alat Trace dan
- Verifikasi apakah
target.urlmemiliki jalur yang tidak valid, yaitu jika dimulai dengan tanda tanya (?), bukan garis miring (/). Jika ya, maka cari tahu kebijakan yang mengubah atau memperbarui nilai
target.urluntuk memuat jalur yang tidak valid.Contoh rekaman aktivitas yang menunjukkan kebijakan JavaScript memperbarui variabel alur
target.url
- Dalam contoh rekaman aktivitas di atas, perhatikan bahwa kebijakan JavaScript telah mengubah atau memperbarui nilai
target.urlagar berisi jalur yang tidak valid. - Perhatikan bahwa
target.urlmemiliki komponen berikut:- skema:
https - otoritas:
mocktarget.apigee.net - jalur:
?json
Jalur dimulai dengan tanda tanya (
?), bukan tanda maju garis miring (/), sehingga tidak valid. - skema:
Log
Menggunakan log di server log Anda
- Jika tidak ada trace untuk error ini (masalah yang terputus-putus), periksa apakah
Anda telah mencatat informasi tentang nilai variabel {i>flow<i}
target.url, menggunakan kebijakan seperti MessageLogging atau ServiceInfo ke server log Anda. - Jika Anda memiliki log, tinjau dan
- Verifikasi apakah
target.urlmemiliki jalur yang tidak valid, dan - Lihat apakah Anda dapat menentukan informasi tentang kebijakan yang diubah
target.urlberisi jalur yang tidak valid
- Verifikasi apakah
Proxy API
Meninjau proxy API yang gagal
Jika Anda tidak memiliki trace atau log untuk error ini, tinjau API yang gagal proxy untuk menentukan apa yang mengubah atau memperbarui variabel alur
target.urlberisi jalur yang tidak valid. Periksa hal-hal berikut:- Kebijakan dalam proxy API
- Setiap alur bersama yang dipanggil dari proxy
- Verifikasi apakah
Periksa kebijakan tertentu dengan cermat (Misalnya: Menetapkan Pesan atau JavaScript) yang mengubah atau memperbarui variabel flow
target.urldan menentukan penyebab memperbaruitarget.urlagar memiliki jalur tidak valid.Berikut beberapa contoh kebijakan yang memperbarui variabel alur
target.urlsecara keliru memuat jalur tidak valid yang mengarah ke {i>error<i} ini.Contoh #1
Contoh #1: Kebijakan JavaScript memperbarui variabel
target.urlvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Dalam contoh di atas, perhatikan bahwa variabel alur
target.urltelah diperbarui dengan nilaihttps://mocktarget.apigee.net?jsonyang ada di variabelurl.Perhatikan bahwa nilai
urlmemiliki komponen berikut:- skema:
https - otoritas:
mocktarget.apigee.net - jalur:
?json
Jalur dimulai dengan tanda tanya (
?), bukan garis miring (/), yang tidak valid. Oleh karena itu, Apigee Edge menampilkan500 Internal Server Errordengan kode errorprotocol.http.BadPath.Contoh #2
Contoh #2: Kebijakan JavaScript memperbarui variabel
target.urlberdasarkan nilai di header permintaanvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Dalam contoh di atas, perhatikan bahwa variabel alur
target.urldiperbarui dengan menggabungkan nilaihttps://mocktarget.apigee.netyang terdapat dalam variabelurldan nilai variabel lainpath, yang nilainya diambil darirequest.header.Path.Jika memiliki akses ke permintaan atau trace yang sebenarnya, Anda dapat memverifikasi nilai sebenarnya diteruskan ke
request.header.Path.Contoh Permintaan yang dibuat oleh pengguna
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
Dalam contoh ini, jalur header tidak dikirim sebagai bagian dari permintaan. Oleh karena itu, nilai dari variabel
pathdalam kebijakan JavaScript adalahnull.Jadi:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + "?user"target.url = https://mocktarget.apigee.net?user
Perhatikan bahwa nilai
target.urlmemiliki komponen berikut:- skema:
https - otoritas:
mocktarget.apigee.net - jalur:
?user
Jalur dimulai dengan tanda tanya (
?), bukan garis miring (/), yang tidak valid. Oleh karena itu, Apigee Edge menampilkan500 Internal Server Errordengan kode errorprotocol.http.BadPath.Contoh #3
Contoh #3: Kebijakan MenetapkanMessage memperbarui variabel
target.url<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net?echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Perhatikan bahwa nilai
urlmemiliki komponen berikut:- skema:
https - otoritas:
mocktarget.apigee.net - jalur:
?echo
Sekali lagi di contoh ini, jalur dimulai dengan tanda tanya (
?) bukan garis miring ke depan (/), yang tidak valid. Oleh karena itu, Apigee Edge menampilkan500 Internal Server Errordengan kode errorprotocol.http.BadPath.- skema:
Resolusi
Sesuai dengan spesifikasi URL
RFC 3986, bagian 3: Komponen Sintaksis, komponen path diperlukan
dan HARUS selalu diawali dengan "/". Jadi, ikuti langkah-langkah di bawah ini untuk menyelesaikan masalah ini:
- Pastikan URL server backend, yang diwakili oleh variabel alur
target.urlselalu memiliki jalur yang valid dan selalu dimulai dengan garis miring ke depan (/).- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan bahwa
jalur setidaknya memiliki garis miring (
/). - Jika Anda menggunakan variabel lain untuk menentukan nilai variabel alur
target.url, lalu pastikan variabel lain tidak memiliki jalur tidak valid. - Jika Anda melakukan operasi string apa pun untuk menentukan nilai variabel flow
target.url, lalu pastikan bahwa hasil atau hasil string operasi tidak memiliki jalur tidak valid.
- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan bahwa
jalur setidaknya memiliki garis miring (
Dalam contoh yang dibahas di atas, Anda dapat memperbaiki masalah ini seperti yang dijelaskan di bawah:
Contoh #1
Contoh #1: Kebijakan JavaScript memperbarui variabel
target.urlGunakan garis miring (
/), bukan tanda tanya (?) di bagian variabelurluntuk memperbaiki masalah ini seperti yang ditunjukkan di bawah ini:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Contoh #2
Contoh #2: Kebijakan JavaScript memperbarui variabel
target.urlberdasarkan nilai di header permintaanvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Pastikan Anda meneruskan jalur yang valid, misalnya:
/usersebagai bagian dari permintaan headerPathuntuk memperbaiki masalah ini seperti yang ditunjukkan di bawah:Contoh Permintaan:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Contoh #3
Contoh #3: Kebijakan MenetapkanMessage memperbarui variabel
target.urlTambahkan jalur yang valid di elemen
<Value>kebijakan MenetapkanMessage. Artinya, ganti tanda tanya (?) dengan garis miring ke depan (/) di elemen<Value>dan tetapkan kehttps://mocktarget.apigee.net/echountuk memperbaiki masalah seperti yang ditunjukkan di bawah ini:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Spesifikasi
Apigee Edge mengharapkan bahwa
pathkomponen di URL server backend HARUS selalu diawali dengan garis miring (/) sesuai dengan hal berikut spesifikasi:Spesifikasi RFC 3986, bagian 3: Komponen Sintaksis RFC 3986, bagian 3.3: Jalur Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Harus mengumpulkan diagnostik.
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
curlyang digunakan untuk mereproduksi500 Internal Server Errordengan kode errorprotocol.http.BadPath - File rekaman aktivitas untuk permintaan API
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama lingkungan
- Paket proxy API
- File rekaman aktivitas untuk permintaan API
Log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDi mana: ORG, ENV, dan PORT# diganti dengan nilai aktual.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message- processor/logs/system.log
Referensi