Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 500 Internal Server Error HTTP durum kodunu ve protocol.http.EmptyPath hata kodunu alır.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 500 Internal Server Error
Ayrıca aşağıdaki hata mesajını da görebilirsiniz:
{
"fault":{
"faultstring":"Request path cannot be empty",
"detail":{
"errorcode":"protocol.http.EmptyPath"
}
}
}Olası nedenler
Bu hata, akış değişkeni
target.url ile temsil edilen arka uç sunucusunun istek URL'si boş bir yol içerdiğinde oluşur.
RFC 3986, bölüm 3: Söz Dizimi Bileşenleri ve RFC 3986, bölüm 3.3: Yol spesifikasyonlarına göre:
URI söz dizimi aşağıdaki bileşenlere sahiptir:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragmentpathbileşeni zorunludur ve yolda başka karakter olmasa bile her zaman eğik çizgi (/) içermelidir.
Bu nedenle, arka uç sunucusunun istek URL'sinde path
bileşeni hiç yoksa, yani eğik çizgi (/) bile yoksa Apigee
Edge, 500 Internal Server Error ve hata kodu protocol.http.EmptyPath ile yanıt verir.
Örneğin: target.url değeri https://www.mocktarget.apigee.net ise path bileşeni boş veya eksik olduğundan bu hata oluşur.
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Arka uç sunucusu URL'sinin (target.url) yolu boş | Akış değişkeni target.url ile temsil edilen arka uç sunucusu URL'sinin yolu boş. |
Edge Public ve Private Cloud kullanıcıları |
Sık karşılaşılan teşhis adımları
Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:
API Monitoring
1. Prosedür: API İzleme'yi kullanma
API İzleme'yi kullanarak hatayı teşhis etmek için:
- Apigee Edge kullanıcı arayüzünde oturum açın. Oturum açarken uygun bir rol kullanın.
Sorunu incelemek istediğiniz kuruluşa geçin.

- Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi, hata kodunu
protocol.http.EmptyPathiçeren bir hücre seçin:
protocol.http.EmptyPathhata koduyla ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:
Başarısız olan isteğin satırını genişletmek için Günlükleri görüntüle 'yi tıklayın.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
500 - Hata Kaynağı:
target - Hata Kodu:
protocol.http.EmptyPath
- Durum Kodu:
- Hata Kaynağı
targetve Hata Koduprotocol.http.EmptyPathise bu, arka uç sunucusu URL'sinin boş bir yola sahip olduğunu gösterir.
Trace
2. Prosedür: Trace aracını kullanma
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştirin ve şunlardan birini yapın:
500 Internal Server Errorhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız sorunu yeniden oluşturmak için API çağrısı yapın.
500 Internal Server Error
Tüm FlowInfo'ları göster'in etkinleştirildiğinden emin olun:
- Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
- İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
Hatayı genellikle aşağıdaki örnekte gösterildiği gibi Hedef İstek Akışı Başlatıldı aşamasından sonraki bir akışta görürsünüz:
İzden hatanın değerini not edin.
error: Request path cannot be empty (hata: İstek yolu boş olamaz)
Hata, Target Request Flow Started (Hedef İstek Akışı Başlatıldı) aşamasından sonra Apigee Edge tarafından oluşturulduğu için arka uç sunucusu URL'sindeki
pathdeğerinin boş olduğunu gösterir. Bu durum, büyük olasılıklatarget.urlakış değişkeni (arka uç sunucusunun URL'sini temsil eder) istek akışındaki politikalardan biri aracılığıyla boş bir yolla güncellendiğinde meydana gelir.- Her akışta Değişkenler Okundu ve Atandı bölümünü, hata noktasından Hedef İstek Akışı Başlatıldı aşamasına doğru geriye doğru inceleyin.
Akış değişkeninin
target.urlgüncellendiği politikayı belirleyin.JavaScript politikasının akış değişkenini
target.urlgüncellediğini gösteren örnek izleme:
Yukarıda gösterilen örnek izlemede, akış değişkeni değişkeninin değerinin, SetTargetURL adlı bir JavaScript politikasında aşağıdaki şekilde güncellendiğini unutmayın:
target.urltarget.url : https://mocktarget.apigee.net
target.urlöğesinin aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https://mocktarget.apigee.net - path: boş
- şema:
- Bu nedenle,
Request path cannot be emptyhatasını alırsınız. - İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
Aşağı kaydırarak Phase Details - Error Headers (Aşama Ayrıntıları - Hata Başlıkları) bölümüne gidin ve aşağıdaki gibi X-Apigee-fault-code ve X-Apigee-fault-source değerlerini belirleyin:

- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini sırasıyla
protocol.http.EmptyPathvetargetolarak görürsünüz. Bu, hatanın arka uç sunucusu URL'sinin boş bir yola sahip olmasından kaynaklandığını gösterir.Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.EmptyPathX-Apigee-fault-source target
NGINX
3. Prosedür: NGINX Erişim Günlüklerini Kullanma
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Özel bulut kullanıcısıysanız HTTP
500 Internal Server Errorile ilgili temel bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Belirli bir süre boyunca (sorun geçmişte yaşandıysa)
500hata koduylaprotocol.http.EmptyPathhata olup olmadığını veya500ile başarısız olan isteklerin olup olmadığını arayın. X-Apigee-fault-code'un
protocol.http.EmptyPathdeğeriyle eşleşen500hataları bulursanız X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 500 hatası:
NGINX erişim günlüğündeki yukarıdaki örnek girişte X- Apigee-fault-code ve X-Apigee-fault-source: için aşağıdaki değerler yer almaktadır:
Üst bilgiler Değer X-Apigee-fault-code protocol.http.EmptyPathX-Apigee-fault-source targetX-Apigee-fault-code ve X-Apigee-fault-source değerlerinin sırasıyla
protocol.http.EmptyPathvetargetolduğunu unutmayın. Bu durum, hatanın arka uç sunucusu URL'sinde boş yol olmasından kaynaklandığını gösterir.
Neden: Arka uç sunucusu URL'sinde (target.url) boş yol var
Teşhis
500 Internal Server Erroriçin Hata Kodunu ve Hata Kaynağını, Yaygın teşhis adımları bölümünde açıklandığı gibi API İzleme, İzleme Aracı veya NGINX erişim günlüklerini kullanarak belirleyin.- Hata Kodu
protocol.http.EmptyPathise ve Hata Kaynağıtargetdeğerine sahipse bu, arka uç sunucusu URL'sinin boş bir yola sahip olduğunu gösterir. Arka uç sunucusu URL'si, Apigee Edge'de
target.urlakış değişkeniyle gösterilir. Bu hata genellikle arka uç sunucusu URL'sini güncellemeye çalışırsanız oluşur. Bu durumda, hedef istek akışındaki politikaların (Proxy/paylaşılan akış içinde) herhangi biri kullanılaraktarget.urldinamik olarak güncellenen URL'nin boş bir yolu olur.- Aşağıdaki adımlardan birini kullanarak akış değişkeni
target.url'nin gerçekten boş bir yola sahip olup olmadığını ve değerinin kaynağını belirleyin:Trace
Trace aracını kullanma
Bu hatayla ilgili bir iz yakaladıysanız İzleme Aracı'nı Kullanma bölümünde açıklanan adımları uygulayın ve:
target.urladlı cihazda boş bir yol olup olmadığını doğrulayın.Evetse
target.urldeğerini boş yol içerecek şekilde hangi politikanın değiştirdiğini veya güncellediğini öğrenin.JavaScript politikasının akış değişkenini güncellediğini gösteren örnek izleme
target.url:
- Yukarıdaki örnek izlemede, JavaScript politikasının
target.urldeğerini boş bir yol içerecek şekilde değiştirdiğini veya güncellediğini unutmayın. target.url'ın aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https://mocktarget.apigee.net - path: boş
- şema:
Günlükler
Günlük sunucunuzdaki günlükleri kullanma
- Bu hatayla ilgili izleme kaydınız yoksa (aralıklı olarak yaşanan bir sorun)
target.urlakış değişkeninin değeriyle ilgili bilgileri MessageLogging veya ServiceCallout gibi politikaları kullanarak günlük sunucunuza kaydedip kaydetmediğinizi kontrol edin. - Günlükleriniz varsa bunları inceleyin ve:
target.urliçinde boş bir yol olup olmadığını doğrulayın vetarget.urliçeriğini boş bir yol içerecek şekilde hangi politikanın değiştirdiğini belirleyip belirleyemeyeceğinizi kontrol edin.
API proxy'si
Başarısız olan API proxy'sini inceleme
Bu hatayla ilgili izleme veya günlükleriniz yoksa akış değişkeni
target.url'yı geçersiz bir yol içerecek şekilde değiştiren veya güncelleyen öğeyi belirlemek için başarısız olan API proxy'sini inceleyin. Aşağıdakileri kontrol edin:- API proxy'sindeki politika
- Proxy'den çağrılan tüm paylaşılan akışlar
Akış değişkenini değiştiren veya güncelleyen belirli politikayı (ör. AssignMessage veya JavaScript) dikkatlice inceleyin
target.urlvetarget.url'nın boş bir yola sahip olacak şekilde güncellenmesinin nedenini belirleyin.Aşağıda, akış değişkenini
target.urlyanlış şekilde güncelleyerek bu hataya yol açan boş bir yol içerecek şekilde değiştiren birkaç örnek politika verilmiştir.1. örnek
1. örnek: JavaScript politikası
target.urldeğişkenini güncellemevar url = "https://mocktarget.apigee.net" context.setVariable("target.url", url);
Yukarıdaki örnekte, akış değişkeni
target.urldeğerinin, başka bir değişken olanurliçinde bulunanhttps://mocktarget.apigee.netdeğeriyle güncellendiğini unutmayın.target.url'ın aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https://mocktarget.apigee.net - path: boş
Yol boş olduğundan Apigee Edge,
500 Internal Server Errorile birlikteprotocol.http.EmptyPathhata kodunu döndürür.2. örnek
2. örnek: JavaScript
target.urldeğişkenini kullanarak politikayı güncellemevar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Yukarıdaki örnekte, akış değişkeni
target.urldeğerinin,urldeğişkeninde bulunanhttps://mocktarget.apigee.netdeğeri ilerequest.header.Path.değerinden alınanpathdeğişkeninin değeri birleştirilerek güncellendiğini unutmayın.Gerçek isteğe veya izlemeye erişiminiz varsa
request.header.Path'ya iletilen gerçek değeri doğrulayabilirsiniz.Kullanıcı tarafından yapılan örnek istek:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token>
Bu örnekte, üstbilgi yolu istek kapsamında gönderilmez. Bu nedenle, JavaScript politikasındaki değişken yolunun değeri
nullolur.Bu durumda:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + nulltarget.url = https://mocktarget.apigee.netnull
target.urlaşağıdaki bileşenlere sahiptir:- şema:
https://mocktarget.apigee.netnull - path: boş
3. örnek
3. örnek: AssignMessage politikası, başka bir değişken aracılığıyla
target.urldeğişkenini güncelliyor<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>
target.urlaşağıdaki bileşenlere sahiptir:- şema:
https://mocktarget.apigee.net - path: boş
Yukarıdaki örneklerin tümünde, arka uç sunucusu URL'sindeki yol (yani
target.url) boş olduğundan Apigee Edge,protocol.http.EmptyPathhata koduyla500 Internal Server Errordeğerini döndürür.- şema:
Çözünürlük
RFC 3986, bölüm 2: Söz Dizimi Bileşenleri spesifikasyonuna göre path bileşeni zorunludur ve path'nin bir parçası olarak başka karakter olmasa bile her zaman eğik çizgi (/) içermelidir. Bu sorunu düzeltmek için aşağıdaki adımları uygulayın:
- Akış değişkeni
target.urlile gösterilen arka uç sunucusu URL'sinin her zaman boş olmayan bir yola sahip olduğundan emin olun.- Bazı durumlarda yolda kaynak adı olmayabilir. Bu durumda, yolun en azından düz eğik çizgi (
/) içerdiğinden emin olun. - Akış değişkeninin
target.urldeğerini belirlemek için başka değişkenler kullanıyorsanız diğer değişkenlerin boş bir yolu olmadığından emin olun. - Akış değişkeninin değerini belirlemek için herhangi bir dize işlemi gerçekleştirirseniz
target.url, dize işlemlerinin sonucunda boş bir yol olmadığından emin olun.
- Bazı durumlarda yolda kaynak adı olmayabilir. Bu durumda, yolun en azından düz eğik çizgi (
- Teşhis bölümünde ele alınan örneklerde bu sorunu aşağıdaki gibi düzeltebilirsiniz:
1. örnek
1. örnek: JavaScript politikası
target.urldeğişkenini güncellemeBu sorunu düzeltmek için
urldeğişkenine eğik çizgi (/) ekleyin.var url = "https://mocktarget.apigee.net/" context.setVariable("target.url", url);
2. örnek
2. örnek: JavaScript
target.urldeğişkenini kullanarak politikayı güncellemevar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Aşağıda gösterildiği gibi bu sorunu düzeltmek için
/iloveapisPathgibi geçerli bir yol ilettiğinizden emin olun.Örnek istek:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
3. örnek
3. örnek: AssignMessage politikası, başka bir değişken aracılığıyla
target.urldeğişkenini güncelliyorAssignMessage politikasının
<Value>öğesine geçerli bir yol ekleyin. Örneğin, MockTarget API'nin yolu olarak/json'yı kullanabilirsiniz. Yani,<Value>öğesini aşağıdaki gibihttps://mocktarget.apigee.net/jsonolarak değiştirin:<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>
Spesifikasyon
Apigee Edge, aşağıdaki spesifikasyonlara göre arka uç sunucu URL'sinin boş bir yola sahip olmamasını bekler:
| Spesifikasyon |
|---|
| RFC 3986, bölüm 3: Söz Dizimi Bileşenleri |
| RFC 3986, bölüm 3.3: Yol |
Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Toplanması gereken teşhis bilgileri başlıklı makaleyi inceleyin.
Teşhis bilgilerini toplama
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve Apigee Edge Destek Ekibi ile iletişime geçin.
Herkese açık bulut kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Kuruluş adı
- Ortam adı
- API proxy'si adı
500 Internal Server Erroröğesiniprotocol.http.EmptyPathhata koduyla yeniden oluşturmak için kullanılancurlkomutunun tamamı- API istekleri için izleme dosyası
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız olan istekler için gözlemlenen hata mesajının tamamı
- Ortam adı
- API proxy paketi
- API istekleri için izleme dosyası
NGINX erişim günlükleri:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: ORG, ENV ve PORT# değerlerinin yerine gerçek değerler girilir.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message- processor/logs/system.log