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
path
wajib 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.BadPath
seperti yang ditunjukkan di bawah ini:Informasi tentang kode kesalahan
protocol.http.BadPath
ditampilkan 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
target
dan 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 Error
terjadi, 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.url
berada 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.url
diperbarui dalam kebijakan JavaScript bernamaJS- SetTargetURL
sebagai berikut:target.url : https://mocktarget.apigee.net?json
- Perhatikan bahwa nilai dalam
target.url
memiliki 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.BadPath
dantarget
, menunjukkan bahwa error ini disebabkan karena URL server backend memiliki jalur yang tidak valid.Header respons Nilai X-Apigee-fault-code protocol.http.BadPath
X-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
500
error dengan kode errorprotocol.http.BadPath
selama durasi tertentu (jika masalah terjadi di sudah lewat) atau jika ada permintaan yang masih gagal dengan500
. Jika Anda menemukan error
500
dengan 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.BadPath
X-Apigee-fault-source target
Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source adalah
protocol.http.BadPath
dantarget
, 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 Error
menggunakan Pemantauan API, Trace Tool, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Jika Kode Kesalahan adalah
protocol.http.BadPath
dan Sumber Kesalahan memiliki nilaitarget
, maka ini menunjukkan bahwa URL server backend memiliki URL tidak valid jalur. URL server backend direpresentasikan oleh variabel alur
target.url
di 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.url
memang 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.url
memiliki 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.url
untuk 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.url
agar berisi jalur yang tidak valid. - Perhatikan bahwa
target.url
memiliki 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.url
memiliki jalur yang tidak valid, dan - Lihat apakah Anda dapat menentukan informasi tentang kebijakan yang diubah
target.url
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 API yang gagal proxy untuk menentukan apa yang mengubah atau memperbarui variabel alur
target.url
berisi 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.url
dan menentukan penyebab memperbaruitarget.url
agar memiliki jalur tidak valid.Berikut beberapa contoh kebijakan yang memperbarui variabel alur
target.url
secara keliru memuat jalur tidak valid yang mengarah ke {i>error<i} ini.Contoh #1
Contoh #1: Kebijakan JavaScript memperbarui variabel
target.url
var url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Dalam contoh di atas, perhatikan bahwa variabel alur
target.url
telah diperbarui dengan nilaihttps://mocktarget.apigee.net?json
yang ada di variabelurl.
Perhatikan bahwa nilai
url
memiliki 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 Error
dengan kode errorprotocol.http.BadPath
.Contoh #2
Contoh #2: Kebijakan JavaScript memperbarui variabel
target.url
berdasarkan 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.url
diperbarui dengan menggabungkan nilaihttps://mocktarget.apigee.net
yang terdapat dalam variabelurl
dan 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
path
dalam kebijakan JavaScript adalahnull
.Jadi:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + "?user"
target.url = https://mocktarget.apigee.net?user
Perhatikan bahwa nilai
target.url
memiliki 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 Error
dengan 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
url
memiliki 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 Error
dengan 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.url
selalu 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.url
Gunakan garis miring (
/
), bukan tanda tanya (?
) di bagian variabelurl
untuk 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.url
berdasarkan 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:
/user
sebagai bagian dari permintaan headerPath
untuk 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.url
Tambahkan 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/echo
untuk 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
path
komponen 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
curl
yang digunakan untuk mereproduksi500 Internal Server Error
dengan 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_log
Di mana: ORG, ENV, dan PORT# diganti dengan nilai aktual.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message- processor/logs/system.log
Referensi