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 diawali 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
path
wajib dan HARUS diawali dengan dan selalu memiliki garis miring (/
).
Oleh karena itu, jika URL permintaan server backend memiliki komponen path
yang dimulai
dengan tanda tanya (?
), bukan garis miring (/
), 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
, error ini akan terjadi karena
path
dianggap tidak valid, karena diawali dengan tanda tanya
(?
), 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 direpresentasikan oleh variabel alur
target.url dimulai dengan tanda tanya (? ), bukan garis miring (/ ). |
Pengguna Edge Publik 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 API Monitoring:
- Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah.
- Buka halaman Analyze > API Monitoring > Menyelidiki.
- Pilih jangka waktu spesifik saat Anda melihat error.
Tempatkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.BadPath
seperti yang ditunjukkan di bawah ini:Informasi tentang kode kesalahan
protocol.http.BadPath
ditampilkan seperti yang ditunjukkan di bawah ini:Klik Lihat log dan 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 yang tidak valid.
Rekaman aktivitas
Prosedur #2: Menggunakan alat Trace
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi perekaman aktivitas dan
- Tunggu hingga error
500 Internal Server Error
terjadi, atau - Jika Anda dapat merekonstruksi masalah, buat panggilan API untuk mereproduksi masalah
500 Internal Server Error
- Tunggu hingga error
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
- Jelajahi berbagai fase rekaman aktivitas dan temukan lokasi terjadinya kegagalan.
Anda akan menemukan error biasanya dalam alur setelah fase Alur Permintaan Target Dimulai seperti yang ditunjukkan di bawah ini:
Catat nilai error dari rekaman aktivitas:
error: Jalur permintaan tidak valid
Karena error ditampilkan oleh Apigee Edge setelah fase Alur Permintaan Target Dimulai, hal ini menunjukkan bahwa URL server backend memiliki jalur yang tidak valid. Hal ini kemungkinan besar akan 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 mundur dari alur error menuju fase Alur Permintaan Target Dimulai.
- Tentukan kebijakan tempat variabel flow
target.url
diperbarui:Contoh rekaman aktivitas yang menunjukkan kebijakan JavaScript memperbarui variabel alur
target.url:
Pada contoh rekaman aktivitas yang ditampilkan di atas, perhatikan nilai variabel variabel alur
target.url
diupdate dalam kebijakan JavaScript bernamaJS- SetTargetURL
sebagai berikut:target.url : https://mocktarget.apigee.net?json
- Perlu diketahui bahwa nilai dalam
target.url
, memiliki komponen berikut:- skema:
https
- otoritas:
mocktarget.apigee.net
- jalur:
?json
- skema:
- Karena komponen jalur dimulai dengan tanda tanya (
?
), bukan garis miring (/
), Anda akan mendapatkan errorInvalid request path
. - Buka Fase AX (Data Analytics Dicatat) di trace, lalu klik Fase tersebut.
Scroll ke bawah ke bagian Phase Details - Error Headers, lalu tentukan nilai 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
, yang 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 untuk melihat apakah ada error
500
dengan kode errorprotocol.http.BadPath
selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan500
. Jika Anda menemukan error
500
dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.BadPath
, tentukan nilai X- Apigee-fault-source.Contoh error 500 dari log akses NGINX:
Contoh entri dari log akses NGINX di atas 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 masing-masing adalah
protocol.http.BadPath
dantarget
, 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 Error
menggunakan Pemantauan API, Alat Pelacakan, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Jika Fault Code adalah
protocol.http.BadPath
dan Fault Source memiliki nilaitarget
, hal ini menunjukkan bahwa URL server backend memiliki jalur yang tidak valid. URL server backend direpresentasikan oleh variabel alur
target.url
di Apigee Edge. Error ini biasanya terjadi jika Anda mencoba memperbarui URL server backend (target.url
) secara dinamis menggunakan salah satu kebijakan (dalam alur bersama/proxy) di alur permintaan Target, sehingga memiliki jalur yang tidak valid.Tentukan apakah variabel flow
target.url
memang memiliki jalur tidak valid dan sumber nilainya menggunakan salah satu metode berikut:Rekaman aktivitas
Menggunakan alat Trace
Jika Anda telah merekam aktivitas error ini, gunakan langkah-langkah seperti yang dijelaskan dalam Menggunakan alat Trace dan
- Verifikasi apakah
target.url
memiliki jalur yang tidak valid, yaitu jika dimulai dengan tanda tanya (?
), bukan garis miring (/
). Jika ya, cari tahu kebijakan yang mengubah atau memperbarui nilai
target.url
agar berisi jalur yang tidak valid.Contoh rekaman aktivitas yang menunjukkan kebijakan JavaScript memperbarui variabel alur
target.url
- Pada 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 garis miring (/
), sehingga tidak valid. - skema:
Log
Menggunakan log di server log
- Jika Anda tidak memiliki rekaman aktivitas untuk error ini (masalah intermiten), periksa apakah
Anda telah mencatat informasi tentang nilai variabel alur
target.url
ke dalam log, menggunakan kebijakan seperti kebijakan MessageLogging atau ServiceCallout ke server log Anda. - Jika Anda memiliki log tersebut, tinjau dan
- Verifikasi apakah
target.url
memiliki jalur yang tidak valid, dan - Lihat apakah Anda dapat menentukan informasi tentang kebijakan mana yang mengubah
target.url
agar berisi jalur yang tidak valid
- Verifikasi apakah
Proxy API
Meninjau proxy API yang gagal
Jika Anda tidak memiliki rekaman aktivitas atau log untuk error ini, tinjau proxy API yang gagal untuk menentukan apa yang mengubah atau memperbarui variabel flow
target.url
agar berisi jalur yang tidak valid. Periksa hal-hal berikut:- Kebijakan dalam proxy API
- Setiap alur bersama yang dipanggil dari proxy
- Verifikasi apakah
Periksa kebijakan spesifik dengan cermat (Misalnya: AllowMessage atau JavaScript) yang mengubah atau mengupdate variabel alur
target.url
dan menentukan penyebab updatetarget.url
agar memiliki jalur yang tidak valid.Berikut adalah beberapa contoh kebijakan yang salah memperbarui variabel alur
target.url
agar berisi jalur tidak valid yang mengarah ke error ini.Contoh #1
Contoh #1: Kebijakan JavaScript yang memperbarui variabel
target.url
var url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Pada contoh di atas, perhatikan bahwa variabel flow
target.url
diperbarui dengan nilaihttps://mocktarget.apigee.net?json
yang terdapat dalam variabel lainurl.
Perhatikan bahwa nilai
url
memiliki komponen berikut:- skema:
https
- otoritas:
mocktarget.apigee.net
- jalur:
?json
Jalur tersebut 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 yang 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);
Pada contoh di atas, perhatikan bahwa variabel flow
target.url
diperbarui dengan menyambungkan 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 sebenarnya, Anda dapat memverifikasi nilai sebenarnya yang 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 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
Perlu diketahui bahwa nilai
target.url
, memiliki komponen berikut:- skema:
https
- otoritas:
mocktarget.apigee.net
- jalur:
?user
Jalur tersebut 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 BiddingMessage 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>
Perlu diketahui bahwa nilai
url
memiliki komponen berikut:- skema:
https
- otoritas:
mocktarget.apigee.net
- jalur:
?echo
Sekali lagi, dalam contoh ini, jalur dimulai dengan tanda tanya (
?
), bukan garis miring (/
), yang tidak valid. Oleh karena itu, Apigee Edge akan 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 untuk memperbaiki masalah ini:
- Pastikan URL server backend, yang diwakili oleh variabel alur
target.url
selalu memiliki jalur yang valid dan selalu diawali dengan garis miring (/
).- 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 flow
target.url
, pastikan variabel lain tidak memiliki jalur tidak valid. - Jika Anda melakukan operasi string untuk menentukan nilai variabel flow
target.url
, pastikan hasil atau hasil operasi string tidak memiliki jalur tidak valid.
- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan bahwa jalur setidaknya memiliki garis miring (
Pada contoh yang dibahas di atas, Anda dapat memperbaiki masalah ini seperti yang dijelaskan di bawah:
Contoh #1
Contoh #1: Kebijakan JavaScript yang memperbarui variabel
target.url
Gunakan garis miring (
/
), bukan tanda tanya (?
) dalam variabelurl
untuk 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 yang 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 header permintaanPath
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 Tetapkan Pesan memperbarui variabel
target.url
Tambahkan jalur yang valid di elemen
<Value>
dari kebijakan ProvideMessage. Artinya, ganti tanda tanya (?
) dengan garis miring (/
) di elemen<Value>
dan tetapkan kehttps://mocktarget.apigee.net/echo
untuk 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 memperkirakan bahwa
path
komponen di URL server backend HARUS selalu diawali dengan garis miring (/
) sesuai spesifikasi berikut:Spesifikasi RFC 3986, bagian 3: Komponen Sintaksis RFC 3986, bagian 3.3: Jalur Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Harus mengumpulkan informasi diagnostik.
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
- Selesaikan 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
Tempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message- processor/logs/system.log
Referensi