Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
İstemci uygulaması 500 Internal Server Error HTTP durum kodunu alır ve
API çağrılarına yanıt olarak protocol.http.EmptyPath hata kodunu ekleyin.
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, arka uç sunucusunun istek URL'si ile akış değişkeni ile temsil edildiğinde ortaya çıkar
target.url, boş bir yol içeriyor.
Spesifikasyonlara göre RFC 3986, bölüm 3: Söz Dizimi Bileşenleri ve RFC 3986, bölüm 3.3: Yol:
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 gereklidir ve her zaman düz eğik çizgi içermesi ZORUNLUDUR (/) gibi bir değer alır.
Bu nedenle, arka uç sunucusunun istek URL'sinde path yoksa
bir eğik çizgi (/) bile olmadığı için Apigee'nin
Edge, 500 Internal Server Error ve hata koduyla yanıt veriyor
protocol.http.EmptyPath.
Örneğin: target.url,
https://www.mocktarget.apigee.net ise bu hata
path bileşen boş veya eksik.
| Neden | Açıklama | Şunun için geçerli sorun giderme talimatları: |
|---|---|---|
| Arka uç sunucu URL'sinin (target.url) yolu boş | target.url akış değişkeni tarafından temsil edilen arka uç sunucusu URL'sinin yolu boş. |
Edge Herkese Açık ve Private Cloud kullanıcıları |
Sık kullanı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 İzlemeyi Kullanma
API Monitoring'i kullanarak hatayı teşhis etmek için:
- Apigee Edge kullanıcı arayüzünde uygun bir role sahip olmalıdır.
Sorunu incelemek istediğiniz kuruluşa geçin.

- Analiz > API İzleme > İnceleme sayfası.
- Hataları gözlemlediğiniz zaman aralığını seçin.
Zaman ile Hata Kodu'nun grafiğini çizin.
Aşağıda gösterildiği gibi
protocol.http.EmptyPathhata koduna sahip bir hücre seçin:
protocol.http.EmptyPathhata koduyla ilgili bilgi şu şekilde gösterilir: aşağıda gösterilmiştir:
Başarısız isteğin olduğu satırı genişletmek için Günlükleri görüntüle 'yi tıklayın.
- Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
- Durum Kodu:
500 - Hata Kaynağı:
target - Hata Kodu:
protocol.http.EmptyPath
- Durum Kodu:
- Hata Kaynağı
targetve Hata Koduprotocol.http.EmptyPathise bu, arka uç sunucu URL'sinin bir olacaktır.
Trace
2. Prosedür: İzleme aracını kullanma
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştirin ve
500 Internal Server Errorhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını yaparak sorunu yeniden oluşturun
500 Internal Server Error.
Show all FlowInfos (Tüm Akış Bilgilerini Göster) seçeneğinin etkin olduğundan emin olun:
- Başarısız isteklerden birini seçin ve izini inceleyin.
- İzlemenin farklı aşamaları arasında gezinin ve hatanın nerede oluştuğunu bulun.
Hatayı genellikle Hedef İstek Akışı Başlatıldı'dan sonraki bir akışta bulursunuz aşamasındaki aşamayı tamamlayın:
İzdeki hatanın değerini not edin.
hata: İstek yolu boş bırakılamaz
Hata, Hedef İstek Akışı Başlatıldı aşamasından sonra Apigee Edge tarafından ortaya çıktığından arka uç sunucu URL'sindeki
pathdeğerinin boş olduğunu belirtir. Bu, büyük olasılıkla, akış değişkenitarget.url(sayfanın arka uç sunucusu), muhtemelen istek akışı.- Önceki deneyimden geriye doğru her bir akışta "Okunan ve Atanmış Değişkenler" bölümünü inceleyin. Hedef İstek Akışı Başlatıldı aşamasına doğru hata noktası.
target.urlakış değişkeninin güncelleneceği politikayı belirleyin.JavaScript politikasının
target.urlakış değişkenini güncellediğini gösteren örnek iz:
Yukarıda gösterilen örnek izde, akış değişkeni değerinin değerine dikkat edin.
target.url, SetTargetURL adlı bir JavaScript politikasında şu şekilde güncellendi: şöyle olur:target.url : https://mocktarget.apigee.net
target.urlaşağıdaki bileşenlere sahiptir:- şema:
https://mocktarget.apigee.net - path: boş
- şema:
- Bu nedenle,
Request path cannot be emptyhatasını alıyorsunuz. - İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidin ve tıklayın.
Aşama Ayrıntıları - Hata Üstbilgileri bölümüne ilerleyin ve X-Apigee-fault-code ve X-Apigee-fault-source değerlerini aşağıda görebilirsiniz:

- Burada X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görebilirsiniz.
sırasıyla
protocol.http.EmptyPathvetarget, bu öğelerin bu hata, arka uç sunucu URL'sinin boş bir yola sahip olmasından kaynaklanır.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:
- Private Cloud kullanıcısıysanız aşağıdakileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz:
HTTP
500 Internal Server Errorile ilgili önemli bilgileri girin. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Hata kodu içeren
500hatası olup olmadığını görmek için arama yapın belirli bir süre boyuncaprotocol.http.EmptyPath(sorun, veya500ile hâlâ başarısız olan istekler varsa bunları kontrol edin. X-Apigee-fault-code eşleştirmesinde
500hatası bulursanızprotocol.http.EmptyPathdeğerini sonra da X-Apigee-fault-source.NGINX erişim günlüğünden örnek 500 hatası:
NGINX erişim günlüğünden yukarıdaki örnek giriş, X- Apigee-fault-code ve X-Apigee-fault-source:
Ü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 aşağıdaki gibi olduğuna dikkat edin: sırasıyla
protocol.http.EmptyPathvetarget, bu öğelerin bu hata, arka uç sunucu URL'sinin boş bir yola sahip olmasından kaynaklanır.
Neden: Arka uç sunucu URL'si (target.url) boş yol içeriyor
Teşhis
- API İzleme, İzleme Aracı veya NGINX erişim günlüklerini kullanarak
500 Internal Server Erroriçin Hata Kodunu ve Hata Kaynağını aşağıda açıklandığı şekilde belirleyin Yaygın teşhis adımları. - Hata Kodu
protocol.http.EmptyPathise ve Hata Kaynağıtargetdeğerine ayarlanırsa bu, arka uç sunucu URL'sinde boş bir yolunu izleyin. Arka uç sunucu URL'si, Apigee'deki
target.urlakış değişkeniyle temsil edilir. Kenar. Bu hata genellikle arka uç sunucu URL'sini (yanitarget.urldinamik olarak ( Proxy/paylaşılan akış) seçeneğini boş bir yol içerecek şekilde ayarlayın.target.urlakış değişkeninin gerçekten boş bir yola ve değeri için bir kaynak oluşturun:Trace
İzleme aracını kullanma
Bu hataya ait bir iz yakaladıysanız şu adımları uygulayın: İzleme Aracı'nı kullanma ve:
target.urlyolunun boş olup olmadığını doğrulayın.Cevabınız evet ise, Boş yol içerecek şekilde
target.url.JavaScript politikasının akış değişkenini güncellediğini gösteren örnek iz
target.url:
- Yukarıdaki örnek izlemede, JavaScript politikasının
target.urldeğerini boş bir yol içerecek şekilde güncelledi. target.urlaşağıdaki bileşenlere sahiptir:- şema:
https://mocktarget.apigee.net - path: boş
- şema:
Günlükler
Günlük sunucunuzdaki günlükleri kullanma
- Bu hataya ilişkin iz yoksa (ara sıra ortaya çıkan bir sorun)
akış değişkeninin değeriyle ilgili bilgileri günlüğe kaydedip kaydetmediğinizi kontrol edin
target.urlgibi politikalar kullanarak MessageLogging veya ServiceÇağrı'yı günlük sunucunuza ekleyin. - Elinizde günlükler varsa bunları inceleyin ve:
target.urlyolunun boş olup olmadığını doğrulayın ve- Hangi politikanın değiştirildiğini belirleyip belirleyemediğinize bakın:
target.url(boş bir yol içerme)
API proxy'si
Başarısız olan API proxy'sini inceleme
Bu hata için iz veya günlükleriniz yoksa başarısız API'yi inceleyin
target.urlakış değişkenini neyin değiştirdiğini veya güncellediğini belirlemek için proxy geçersiz yol içermelidir. Aşağıdakileri kontrol edin:- API proxy'sindeki politika
- Proxy'den çağrılan tüm paylaşılan akışlar
veya
target.urlakış değişkenini dikkatli bir şekilde günceller ve güncelleme nedenini belirlertarget.urlişaretini kaldırın.target.urlakış değişkenini güncelleyen birkaç örnek politikayı aşağıda bulabilirsiniz hatasına neden olan boş bir yol içermesini önler.Örnek 1
1. örnek:
target.urldeğişkenini güncelleyen JavaScript Politikasıvar url = "https://mocktarget.apigee.net" context.setVariable("target.url", url);
Yukarıdaki örnekte
target.urlakış değişkeninin güncellendiğine dikkat edin başka bir değişkende bulunanhttps://mocktarget.apigee.netdeğeriyleurl.target.urlaşağıdaki bileşenlere sahiptir:- şema:
https://mocktarget.apigee.net - path: boş
Yol boş olduğu için Apigee Edge,
500 Internal Server Errorhatasını hata koduprotocol.http.EmptyPath.Örnek 2
2. Örnek:
target.urldeğişkenini güncelleyen JavaScript Politikasıvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Yukarıdaki örnekte
target.urlakış değişkeninin bir değişkende bulunanhttps://mocktarget.apigee.netdeğerini birleştirmeurlve değişkenin değeripatholan değerrequest.header.Path.kaynağından alındıAsıl istek veya izleme işlemine erişiminiz varsa gerçek değeri doğrulayabilirsiniz
request.header.Pathişlevine aktarıldı.Kullanıcı tarafından gönderilen örnek istek:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token>
Bu örnekte, başlık yolu isteğin bir parçası olarak gönderilmemektedir. Dolayısıyla, JavaScript politikasındaki değişken yolunun yüzdesi:
null.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ş
Örnek 3
3. Örnek:
target.urldeğişkeninin atanmış ileti dizisine benzer şekilde başka bir değişken<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ç sunucu URL'sindeki yol
target.urlboş olduğu için Apigee Edgeprotocol.http.EmptyPathhata koduyla500 Internal Server Error.- şema:
Çözünürlük
Spesifikasyona göre
RFC 3986, bölüm 2: Söz Dizimi Bileşenleri'nde path bileşeni
zorunludur ve
path kapsamında başka karakterler de yer alacak. Aşağıdaki adımları uygulayarak
şu sorunu düzeltin:
- Akış değişkeniyle temsil edilen arka uç sunucu URL'sinin
target.urldaima boş olmayan bir yol içerir.- Bazı durumlarda, yolda bir kaynak adınız olmayabilir. Bu durumda,
en azından düz eğik çizgi (
/) içermelidir. - Akış değişkeninin değerini belirlemek için başka değişkenler kullanırsanız
target.url, ardından diğer değişkenlerin boş bir yol olmadığından emin olun. - Akış değişkeninin değerini belirlemek için herhangi bir dize işlemi gerçekleştirirseniz
target.url, ardından dizenin sonucunun işlemlerinin boş bir yolu yoktur.
- Bazı durumlarda, yolda bir kaynak adınız olmayabilir. Bu durumda,
en azından düz eğik çizgi (
- Teşhis bölümünde açıklanan örneklerde bu sorunu aşağıdaki şekilde düzeltebilirsiniz:
aşağıda açıklanmıştır:
Örnek 1
1. örnek:
target.urldeğişkenini güncelleyen JavaScript PolitikasıBu sorunu düzeltmek için
urldeğişkenine eğik çizgi (/) ekleyin. sorunu içerir:var url = "https://mocktarget.apigee.net/" context.setVariable("target.url", url);
Örnek 2
2. Örnek:
target.urldeğişkenini güncelleyen JavaScript Politikasıvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Şu belgenin bir parçası olarak geçerli bir yol ilettiğinizden emin olun:
/iloveapisbu sorunu aşağıda gösterildiği gibi düzeltmek içinPathbaşlığını isteyin:Örnek istek:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
Örnek 3
3. Örnek:
target.urldeğişkeninin atanmış ileti dizisine benzer başka bir değişkenAttributionMessage politikasının
<Value>öğesine geçerli bir yol ekleyin. Örneğin, Örneğin, URL'nin yol olarak/jsonMockTarget API'si. Yani<Value>öğesini Aşağıda gösterildiği gibihttps://mocktarget.apigee.net/json:<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, şuna göre arka uç sunucu URL'sinin boş bir yolunun olmamasını bekler: şu spesifikasyonlara dikkat edin:
| Spesifikasyon |
|---|
| RFC 3986, bölüm 3: Söz Dizimi Bileşenleri |
| RFC 3986, bölüm 3.3: Yol |
Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız şu sayfaya gidin: Teşhis bilgileri toplanmalıdır.
Teşhis bilgileri toplanmalıdır
Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki ve Apigee Edge Destek Ekibi ile iletişime geçin.
Herkese açık Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Kuruluş adı
- Ortam adı
- API Proxy adı
500 Internal Server Erroröğesiniprotocol.http.EmptyPathhata koduyla yeniden oluşturmak için kullanılancurlkomutunu tamamlayın- API istekleri için izleme dosyası
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız istekler için tam hata mesajı gözlemlendi
- 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_logYer: ORG, ENV ve PORT# şununla değiştirilir: gerçek değerler.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message- processor/logs/system.log