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.EmptyPath 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":"Request path cannot be empty",
      "detail":{
         "errorcode":"protocol.http.EmptyPath"
      }
   }
}Kemungkinan penyebab
    Error ini terjadi jika URL permintaan server backend, diwakili oleh variabel alur
    
      target.url, berisi jalur kosong.
  
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 selalu memiliki garis miring ke depan (/), meskipun tidak ada karakter lain sebagai bagian dari jalur.
    Oleh karena itu, jika URL permintaan server backend tidak memiliki path
    sama sekali, yaitu tidak memiliki garis miring ke depan (/), kemudian Apigee
    Edge merespons dengan 500 Internal Server Error dan kode error
    protocol.http.EmptyPath.
  
    Misalnya: Jika target.url memiliki nilai
    https://www.mocktarget.apigee.net, error ini akan terjadi sebagai
    path komponen kosong atau tidak ada.
  
| Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk | 
|---|---|---|
| URL server backend (target.url) memiliki jalur kosong | URL server Backend yang diwakili oleh variabel alur target.urlmemiliki jalur kosong. | 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 yang memiliki kode kesalahan - protocol.http.EmptyPathseperti yang ditunjukkan di bawah:  
- Informasi tentang kode kesalahan - protocol.http.EmptyPathditampilkan sebagai yang ditampilkan di bawah ini:  
- Klik Lihat log untuk meluaskan baris permintaan yang gagal.   
- Dari jendela Logs, perhatikan detail berikut:
        - Kode Status: 500
- Sumber Kesalahan: target
- Kode Kesalahan: protocol.http.EmptyPath
 
- Kode Status: 
- Jika Sumber Kesalahan adalah targetdan Kode Kesalahan adalahprotocol.http.EmptyPath, hal ini menunjukkan bahwa URL server backend memiliki jalur kosong.
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 boleh kosong - Karena error dimunculkan oleh Apigee Edge setelah fase Alur Permintaan Target Dimulai, hal ini menunjukkan bahwa - pathdi URL server backend kosong. Ini akan kemungkinan besar terjadi jika variabel alur- target.url(yang mewakili URL untuk server backend ) mungkin telah diperbarui dengan jalur kosong melalui salah satu kebijakan di alur permintaan.
- Periksa bagian Variabel Dibaca dan Ditetapkan di setiap alur mundur dari error pada fase Alur Permintaan Target Dimulai.
- Tentukan kebijakan tempat variabel alur - target.urldiperbarui.- 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 bernama SetTargetURL sebagai berikut ini:- target.url : https://mocktarget.apigee.net 
- Perhatikan bahwa target.urlmemiliki komponen berikut:- skema: https://mocktarget.apigee.net
- path: kosong
 
- skema: 
- Oleh karena itu, Anda akan mendapatkan error Request path cannot be empty.
- 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 sebagai
    protocol.http.EmptyPathdantarget, yang menunjukkan bahwa error ini terjadi karena URL server backend memiliki jalur yang kosong.Header Respons Nilai X-Apigee-fault-code protocol.http.EmptyPathX-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.EmptyPathselama 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 nilai- protocol.http.EmptyPath, lalu tentukan nilai atribut 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.EmptyPath- X-Apigee-fault-source - target- Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source adalah - protocol.http.EmptyPathdan- target, yang menunjukkan bahwa error ini terjadi karena URL server backend memiliki jalur kosong.
Penyebab: URL server backend (target.url) memiliki jalur yang kosong
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.EmptyPathdan Sumber Kesalahan memiliki nilaitarget, ini menunjukkan bahwa URL server backend memiliki kolom kosong jalur.
- URL server backend direpresentasikan oleh variabel alur - target.urldi Apigee Edge. Error ini biasanya terjadi jika Anda mencoba memperbarui URL server backend, yaitu,- target.urlsecara dinamis menggunakan salah satu kebijakan (dalam Alur proxy/bersama) di alur permintaan Target, sehingga memiliki jalur kosong.
- Tentukan apakah variabel flow target.urlmemang memiliki jalur kosong dan sumber untuk nilainya menggunakan salah satu langkah berikut:TraceMenggunakan alat Trace Jika Anda telah merekam aktivitas error ini, gunakan langkah-langkah seperti yang dijelaskan di Menggunakan Alat Rekaman Aktivitas dan: - Verifikasi apakah target.urlmemiliki jalur kosong.
- Jika ya, cari tahu kebijakan mana yang mengubah atau memperbarui nilai - target.urluntuk memuat jalur kosong.- 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 kosong.
- Perhatikan bahwa target.urlmemiliki komponen berikut:- skema: https://mocktarget.apigee.net
- path: kosong
 
- skema: 
 LogMenggunakan log di server log Anda - Jika tidak ada trace untuk error ini (masalah yang terputus-putus), periksa ke
            melihat apakah Anda telah mencatat informasi tentang nilai variabel alur ke dalam log
            target.url, menggunakan kebijakan seperti MessageLogging atau ServiceKeterangan ke server log Anda.
- Jika Anda memiliki log tersebut, tinjau log tersebut dan:
            - Verifikasi apakah target.urlmemiliki jalur kosong, dan
- Lihat apakah Anda dapat menentukan kebijakan mana yang mengubah target.urluntuk memuat jalur kosong
 
- Verifikasi apakah 
 Proxy APIMeninjau 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 (misalnya, TetapkanMessage atau JavaScript) yang mengubah atau memperbarui variabel alur - target.urldengan cermat dan menentukan penyebab pembaruan- target.urluntuk memiliki jalur kosong.- Berikut beberapa contoh kebijakan yang memperbarui variabel alur - target.urlsalah memuat jalur kosong yang mengarah ke {i>error<i} ini.- Contoh #1- Contoh #1: Kebijakan JavaScript memperbarui variabel - target.url- var url = "https://mocktarget.apigee.net" context.setVariable("target.url", url); - Dalam contoh di atas, perhatikan bahwa variabel alur - target.urldiperbarui dengan nilai- https://mocktarget.apigee.netyang terdapat dalam variabel lain- url.- Perhatikan bahwa - target.urlmemiliki komponen berikut:- skema: https://mocktarget.apigee.net
- path: kosong
 - Karena jalur ini kosong, Apigee Edge menampilkan - 500 Internal Server Errordengan kode error- protocol.http.EmptyPath.- Contoh #2- Contoh #2: Kebijakan JavaScript memperbarui variabel - target.url- var 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 oleh menggabungkan nilai- https://mocktarget.apigee.netyang terdapat dalam variabel- urldan nilai variabel lain- path, yang nilai diambil dari- request.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 pengguna: - curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> - Dalam contoh ini, jalur header tidak dikirim sebagai bagian dari permintaan. Oleh karena itu, nilai jalur variabel dalam kebijakan JavaScript adalah - null.- Jadi: - url = https://mocktarget.apigee.net + path
- url = https://mocktarget.apigee.net + null
- target.url = https://mocktarget.apigee.netnull
 - Perhatikan bahwa - target.urlmemiliki komponen berikut:- skema: https://mocktarget.apigee.netnull
- path: kosong
 - Contoh #3- Contoh #3: Kebijakan MenetapkanMessage memperbarui variabel - target.urlmelalui variabel lainnya- <AssignMessage async="false" continueOnError="false" enabled="true" name=">AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage> - Perhatikan bahwa - target.urlmemiliki komponen berikut:- skema: https://mocktarget.apigee.net
- path: kosong
 - Dalam semua contoh di atas, jalur di URL server backend, yaitu - target.urlkosong, sehingga Apigee Edge menampilkan- 500 Internal Server Errordengan kode error- protocol.http.EmptyPath.
- skema: 
Resolusi
Sesuai dengan spesifikasi
    
      RFC 3986, bagian 2: Komponen Sintaksis, komponen path
      wajib dan HARUS selalu memiliki garis miring (/), meskipun tidak
      karakter lain sebagai bagian dari path. Lakukan langkah-langkah berikut untuk
    memperbaiki masalah ini:
  
- Pastikan URL server backend, yang diwakili oleh variabel alur
        target.urlselalu memiliki jalur yang tidak kosong.- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan jalur tersebut
            setidaknya memiliki garis miring (/).
- Jika Anda menggunakan variabel lain untuk menentukan nilai variabel alur
            target.url, lalu pastikan bahwa variabel lain tidak memiliki jalur kosong.
- Jika Anda melakukan operasi string apa pun untuk menentukan nilai variabel flow
            target.url, lalu pastikan bahwa hasil atau hasil string tidak memiliki jalur kosong.
 
- Dalam beberapa kasus, Anda mungkin tidak memiliki nama resource di jalur, lalu pastikan jalur tersebut
            setidaknya memiliki garis miring (
- Dalam contoh yang dibahas di bagian Diagnosis, Anda dapat memperbaiki masalah ini sebagai
        dijelaskan di bawah ini:
        Contoh #1Contoh #1: Kebijakan JavaScript memperbarui variabel target.urlTambahkan garis miring ( /) ke variabelurluntuk memperbaiki masalah ini seperti yang ditunjukkan di bawah ini:var url = "https://mocktarget.apigee.net/" context.setVariable("target.url", url); Contoh #2Contoh #2: Kebijakan JavaScript memperbarui variabel target.urlvar 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, /iloveapissebagai 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: /iloveapis" Contoh #3Contoh #3: Kebijakan MenetapkanMessage memperbarui variabel target.urlmelalui variabel lainnyaTambahkan jalur yang valid di elemen <Value>kebijakan MenetapkanMessage. Sebagai misalnya, Anda dapat menggunakan/jsonsebagai jalur untuk MockTarget API. Artinya, ubah elemen<Value>untukhttps://mocktarget.apigee.net/jsonseperti 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/json</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage> 
Spesifikasi
Apigee Edge mengharapkan bahwa URL server backend tidak memiliki jalur kosong 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 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.EmptyPath
- 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