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, yang diwakili oleh variabel alur
target.url,
berisi path yang dimulai dengan tanda tanya (?), bukan
garis miring (/), yang tidak valid.
Sesuai 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 dimulai dengan dan selalu memiliki garis miring (/).
Oleh karena itu, jika URL permintaan server backend memiliki komponen path yang dimulai
dengan tanda tanya (?) dan bukan garis miring (/), maka Apigee
Edge akan merespons dengan 500 Internal Server Error dan kode error
protocol.http.BadPath.
Misalnya: Jika target.url memiliki nilai
https://www.mocktarget.apigee.net?json, maka error ini terjadi karena
path ditemukan tidak valid, karena dimulai dengan tanda tanya
(?) dan bukan garis miring (/).
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang 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 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.
Beralih ke organisasi tempat Anda ingin menyelidiki masalah.
- Buka halaman Analyze > API Monitoring > Investigate.
- Pilih jangka waktu tertentu saat Anda mengamati error.
Petakan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.BadPathseperti yang ditunjukkan di bawah:
Informasi tentang kode kesalahan
protocol.http.BadPathditampilkan seperti yang ditunjukkan di bawah:
Klik Lihat log dan luaskan baris untuk permintaan yang gagal.
- Dari jendela Logs, catat 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, maka hal ini menunjukkan bahwa URL server backend memiliki jalur yang tidak valid.
Trace
Prosedur #2: Menggunakan alat Trace
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi rekaman aktivitas dan salah satu dari
- Tunggu hingga terjadi error
500 Internal Server Error, atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah
500 Internal Server Error
- Tunggu hingga terjadi error
Pastikan Show all FlowInfos diaktifkan:

- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
- Telusuri berbagai fase rekaman aktivitas dan temukan tempat terjadinya kegagalan.
Anda biasanya akan menemukan error dalam alur setelah fase Target Request Flow Started seperti yang ditunjukkan di bawah:

Perhatikan nilai error dari rekaman aktivitas:
error: Jalur permintaan tidak valid
Karena error dimunculkan oleh Apigee Edge setelah fase Target Request Flow Started, error ini menunjukkan bahwa URL server backend memiliki jalur yang tidak valid. Hal ini kemungkinan besar terjadi jika flow variable
target.url(yang merepresentasikan 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 yang Dibaca dan Ditetapkan di setiap alur mundur dari alur error menuju fase Alur Permintaan Target Dimulai.
- Tentukan kebijakan, tempat variabel alur
target.urldiperbarui:Contoh trace yang menunjukkan kebijakan JavaScript memperbarui flow variable
target.url:
Dalam rekaman aktivitas contoh yang ditampilkan di atas, perhatikan nilai flow variable
target.urldiperbarui dalam kebijakan JavaScript bernamaJS- SetTargetURLsebagai berikut:target.url : https://mocktarget.apigee.net?json - Perhatikan bahwa nilai dalam
target.url, memiliki komponen berikut:- skema:
https - authority:
mocktarget.apigee.net - path:
?json
- skema:
- Karena komponen jalur dimulai dengan tanda tanya (
?) bukan garis miring (/), Anda akan mendapatkan errorInvalid request path. - Buka Fase AX (Data Analytics Direkam) dalam rekaman aktivitas, lalu klik.
Scroll ke bawah ke bagian Phase Details - Error Headers dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah:

Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.BadPathdantarget, masing-masing, yang 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 utama tentang
500 Internal Server ErrorHTTP. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Cari untuk melihat apakah ada error
500dengan kode errorprotocol.http.BadPathselama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan500. Jika Anda menemukan error
500dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.BadPath, tentukan nilai X-Apigee-fault-source.Contoh error 500 dari log akses NGINX:
Entri contoh 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 yang tidak valid.
Penyebab: URL server backend (target.url) memiliki jalur yang tidak valid
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk
500 Internal Server Errormenggunakan Pemantauan API, Alat Trace, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Jika Fault Code adalah
protocol.http.BadPathdan Fault Source memiliki nilaitarget, maka ini menunjukkan bahwa URL server backend memiliki jalur yang tidak valid. URL server backend diwakili oleh flow variable
target.urldi Apigee Edge. Error ini biasanya terjadi jika Anda mencoba memperbarui URL server backend (target.url) secara dinamis menggunakan salah satu kebijakan (dalam proxy/shared flow) dalam alur permintaan Target, sehingga memiliki jalur yang tidak valid.Tentukan apakah variabel alur
target.urlmemang memiliki jalur tidak valid dan sumber nilainya menggunakan salah satu metode berikut:Trace
Menggunakan alat Trace
Jika Anda telah merekam aktivitas pelacakan untuk error ini, gunakan langkah-langkah seperti yang dijelaskan dalam Menggunakan alat Trace dan
- Verifikasi apakah
target.urlmemiliki jalur yang tidak valid, yaitu apakah jalur tersebut dimulai dengan tanda tanya (?) dan bukan garis miring (/). Jika ya, temukan kebijakan yang mengubah atau memperbarui nilai
target.urlagar berisi jalur yang tidak valid.Contoh rekaman aktivitas yang menunjukkan kebijakan JavaScript memperbarui variabel alur
target.url
- Dalam rekaman aktivitas contoh 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 - authority:
mocktarget.apigee.net - path:
?json
Jalur dimulai dengan tanda tanya (
?) dan bukan garis miring (/), sehingga tidak valid. - skema:
Log
Menggunakan log di server log Anda
- Jika Anda tidak memiliki trace untuk error ini (masalah sementara), periksa apakah Anda telah mencatat informasi tentang nilai flow variable
target.url, menggunakan kebijakan seperti MessageLogging atau ServiceCallout ke server log Anda. - Jika Anda memiliki log, tinjau log tersebut dan
- Verifikasi apakah
target.urlmemiliki jalur yang tidak valid, dan - Lihat apakah Anda dapat menentukan informasi tentang kebijakan mana yang diubah
target.urlagar berisi jalur yang tidak valid
- Verifikasi apakah
Proxy API
Meninjau proxy API yang gagal
Jika Anda tidak memiliki trace atau log untuk error ini, tinjau Proxy API yang gagal untuk menentukan apa yang mengubah atau memperbarui flow variable
target.urlsehingga berisi jalur yang tidak valid. Periksa hal-hal berikut:- Kebijakan dalam proxy API
- Alur bersama yang dipanggil dari proxy
- Verifikasi apakah
Periksa kebijakan tertentu dengan cermat (Misalnya: AssignMessage atau JavaScript) yang mengubah atau memperbarui flow variable
target.urldan tentukan penyebab pembaruantarget.urlagar memiliki jalur yang tidak valid.Berikut beberapa contoh kebijakan yang memperbarui flow variable
target.urlsecara salah sehingga berisi jalur yang tidak valid yang menyebabkan error ini.Contoh #1
Contoh #1: Pembaruan Kebijakan JavaScript pada variabel
target.urlvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Pada contoh di atas, perhatikan bahwa flow variable
target.urldiperbarui dengan nilaihttps://mocktarget.apigee.net?jsonyang ada dalam variabelurl.lainnyaPerhatikan bahwa nilai
urlmemiliki komponen berikut:- skema:
https - authority:
mocktarget.apigee.net - path:
?json
Jalur dimulai dengan tanda tanya (
?) dan 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 flow variable
target.urldiperbarui dengan menggabungkan nilaihttps://mocktarget.apigee.netyang ada dalam variabelurldan nilai variabel lainpath, yang nilainya diambil darirequest.header.Path.Jika Anda memiliki akses ke permintaan atau rekaman aktivitas yang sebenarnya, Anda dapat memverifikasi nilai sebenarnya yang diteruskan ke
request.header.Path.Permintaan Sampel 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 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 - authority:
mocktarget.apigee.net - path:
?user
Jalur dimulai dengan tanda tanya (
?) dan bukan garis miring (/), yang tidak valid. Oleh karena itu, Apigee Edge menampilkan500 Internal Server Errordengan kode errorprotocol.http.BadPath.Contoh #3
Contoh #3: Kebijakan AssignMessage 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 - authority:
mocktarget.apigee.net - path:
?echo
Sekali lagi dalam contoh ini, jalur dimulai dengan tanda tanya (
?) bukan garis miring (/), yang tidak valid. Oleh karena itu, Apigee Edge menampilkan500 Internal Server Errordengan kode errorprotocol.http.BadPath.- skema:
Resolusi
Sesuai spesifikasi URL
RFC 3986, bagian 3: Komponen Sintaksis, komponen path diperlukan
dan HARUS selalu dimulai dengan "/". Jadi, ikuti langkah-langkah di bawah untuk memperbaiki masalah ini:
- Pastikan URL server backend, yang diwakili oleh flow variable
target.urlselalu memiliki jalur yang valid dan selalu dimulai dengan garis miring (/).- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan
jalur setidaknya memiliki garis miring ke depan (
/). - Jika Anda menggunakan variabel lain untuk menentukan nilai flow variable
target.url, pastikan variabel lain tidak memiliki jalur yang tidak valid. - Jika Anda melakukan operasi string apa pun untuk menentukan nilai flow variable
target.url, pastikan hasil atau keluaran operasi string tidak memiliki jalur tidak valid.
- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan
jalur setidaknya memiliki garis miring ke depan (
Dalam contoh yang dibahas di atas, Anda dapat memperbaiki masalah ini seperti yang dijelaskan di bawah:
Contoh #1
Contoh #1: Pembaruan Kebijakan JavaScript pada variabel
target.urlGunakan garis miring (
/) dan bukan tanda tanya (?) di variabelurluntuk memperbaiki masalah ini seperti yang ditunjukkan di bawah: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 header permintaanPathuntuk 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 AssignMessage memperbarui variabel
target.urlTambahkan jalur yang valid dalam elemen
<Value>kebijakan AssignMessage. Artinya, ganti tanda tanya (?) dengan garis miring ke depan (/) di elemen<Value>dan tetapkan kehttps://mocktarget.apigee.net/echountuk memperbaiki masalah ini seperti yang ditunjukkan di bawah:<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 dimulai dengan garis miring (/) sesuai dengan spesifikasi berikut:Spesifikasi RFC 3986, bagian 3: Komponen Sintaksis RFC 3986, bagian 3.3: Path Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik yang diperlukan.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama proxy API
- Perintah
curllengkap yang 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_logTempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message- processor/logs/system.log
Referensi