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.BadPath 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":"Invalid request path",
"detail":{
"errorcode":"protocol.http.BadPath"
}
}
}Olası nedenler
Bu hata, akış değişkeni target.url ile temsil edilen arka uç sunucusunun istek URL'si, eğik çizgi (/) yerine soru işareti (?) ile başlayan bir path içerdiğinde oluşur. Bu durum geçersizdir.
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 her zaman eğik çizgiyle (/) başlamalıdır.
Bu nedenle, arka uç sunucusunun istek URL'sinde eğik çizgi (/) yerine soru işareti (?) ile başlayan bir path bileşeni varsa Apigee Edge, 500 Internal Server Error ve protocol.http.BadPath hata koduyla yanıt verir.
Örneğin: target.url değeri https://www.mocktarget.apigee.net?json ise path değeri eğik çizgi (/) yerine soru işaretiyle (?) başladığı için geçersiz olarak kabul edilir ve bu hata oluşur.
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Arka uç sunucusu URL'si (target.url) geçersiz bir yol içeriyor | Akış değişkeniyle
target.url gösterilen arka uç sunucusu URL'sindeki yol bileşeni, sağa
eğik çizgi (/) yerine soru işareti (?) ile başlıyor. |
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. Uygun bir role sahip bir kullanıcı olarak oturum açmanız gerekir.
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.BadPathiçeren bir hücre seçin:
protocol.http.BadPathhata koduyla ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:
Günlükleri görüntüle 'yi tıklayın ve başarısız isteğin satırını genişletin.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
500 - Hata Kaynağı:
target - Hata Kodu:
protocol.http.BadPath
- Durum Kodu:
- Hata Kaynağı
targetve Hata Koduprotocol.http.BadPathise bu, arka uç sunucusu URL'sinin geçersiz 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 gibi Hedef İstek Akışı Başlatıldı aşamasından sonraki bir akışta görürsünüz:

İzlemeyle ilgili hatanın değerini not edin:
hata: Geçersiz istek yolu
Hata, Target Request Flow Started (Hedef İstek Akışı Başlatıldı) aşamasından sonra Apigee Edge tarafından oluşturulduğundan arka uç sunucusu URL'sinin geçersiz bir yola sahip olduğunu gösterir. Bu durum, Apigee Edge'deki
target.urlakış değişkeni (arka uç sunucusunun URL'sini temsil eder) hedef istek akışındaki politikalardan biri aracılığıyla geçersiz bir yolla güncellenmişse büyük olasılıkla ortaya çıkar.- Her akışta Hedef İstek Akışı Başlatıldı aşamasına doğru hata akışından geriye doğru Okunan ve Atanan Değişkenler bölümünü inceleyin.
- Akış değişkeninin
target.urlwas güncellendiği politikayı belirleyin:JavaScript politikasının akış değişkenini güncellediğini gösteren örnek izleme
target.url:
Yukarıda gösterilen örnek izlemede, akış değişkeni değişkeninin değerinin
target.url,JS- SetTargetURLadlı JavaScript politikasında aşağıdaki şekilde güncellendiğini unutmayın:target.url : https://mocktarget.apigee.net?json target.urliçindeki değerin aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https - authority:
mocktarget.apigee.net - path:
?json
- şema:
- Yol bileşeni, öne eğik çizgi (
/) yerine soru işaretiyle (?) başladığındanInvalid request pathhatası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ğıdaki gibi Phase Details - Error Headers (Aşama Ayrıntıları - Hata Başlıkları) bölümüne gidin ve X-Apigee-fault-code ile X-Apigee-fault-source değerlerini belirleyin:

X-Apigee-fault-code ve X-Apigee-fault-source değerlerini sırasıyla
protocol.http.BadPathvetargetolarak görürsünüz. Bu, hatanın arka uç sunucusu URL'sinin geçersiz bir yola sahip olmasından kaynaklandığını gösterir.Yanıt başlıkları Değer X-Apigee-fault-code protocol.http.BadPathX-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.BadPathhata olup olmadığını veya500ile başarısız olan isteklerin olup olmadığını arayın. X-Apigee-fault-code'un
protocol.http.BadPathdeğ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 bulunur:
Üst bilgiler Değer X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetX-Apigee-fault-code ve X-Apigee-fault-source değerlerinin sırasıyla
protocol.http.BadPathvetargetolduğuna dikkat edin. Bu değerler, hatanın arka uç sunucusu URL'sinin geçersiz bir yola sahip olmasından kaynaklandığını gösterir.
Neden: Arka uç sunucusu URL'si (target.url) geçersiz bir yol içeriyor
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.BadPathise ve Hata Kaynağıtargetdeğerini içeriyorsa bu, arka uç sunucu URL'sinin geçersiz 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 hedef istek akışındaki politikaların (proxy/paylaşılan akış içinde) herhangi birini kullanarak arka uç sunucusu URL'sini dinamik olarak güncellemeye çalıştığınızda ve URL'nin geçersiz bir yolu olduğunda oluşur (target.url).Aşağıdaki yöntemlerden birini kullanarak
target.urlakış değişkeninin gerçekten geçersiz bir yola sahip olup olmadığını ve değerinin kaynağını belirleyin:Trace
Trace aracını kullanma
Bu hata için bir iz yakaladıysanız İzleme aracını kullanma bölümünde açıklanan adımları uygulayın.
target.urlöğesinin geçersiz bir yola sahip olup olmadığını, yani eğik çizgi (/) yerine soru işareti (?) ile başlayıp başlamadığını doğrulayın.Evetse
target.urldeğerini geçersiz bir yol içerecek şekilde değiştiren veya güncelleyen politikayı bulun.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 geçersiz 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 - authority:
mocktarget.apigee.net - path:
?json
Yol, eğik çizgi (
/) yerine soru işaretiyle (?) başlıyor, bu nedenle geçersiz.- şema:
Günlükler
Günlük sunucunuzdaki günlükleri kullanma
- Bu hatayla ilgili iziniz yoksa (aralıklı olarak görülen 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.urlöğesinin geçersiz bir yol içerip içermediğini doğrulayın.- Hangi politikanın
target.urlöğesini geçersiz yol içerecek şekilde değiştirdiğini belirleyip belirleyemediğ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
target.urldeğiştiren veya güncelleyen politikayı (ör. AssignMessage veya JavaScript) dikkatlice inceleyin vetarget.urldeğişkeninin geçersiz 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 geçersiz bir yol içermesine neden olan birkaç örnek politika verilmiştir.1. örnek
1. örnek: JavaScript politikası
target.urldeğişkenini güncellemevar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Yukarıdaki örnekte, akış değişkeni
target.urldeğerinin başka bir değişkende (url.) bulunanhttps://mocktarget.apigee.net?jsondeğeriyle güncellendiğini unutmayın.urldeğerinin aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https - authority:
mocktarget.apigee.net - path:
?json
Yol, eğik çizgi (
/) yerine soru işaretiyle (?) başlıyor , bu durum geçersizdir. Bu nedenle, Apigee Edge,500 Internal Server Errorileprotocol.http.BadPathhata kodunu döndürür.2. örnek
2. örnek: İstek başlığındaki değere göre
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, akış değişkeni
target.urldeğerinin,urldeğişkeninde bulunanhttps://mocktarget.apigee.netdeğeri verequest.header.Path.öğesinden 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> -H "Path: ?user"
Bu örnekte, üstbilgi yolu istek kapsamında gönderilmez. Bu nedenle, JavaScript politikasındaki
pathdeğişkeninin değerinullolur.Bu durumda:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + "?user"target.url = https://mocktarget.apigee.net?user
target.urldeğerinin aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https - authority:
mocktarget.apigee.net - path:
?user
Yol, eğik çizgi (
/) yerine soru işaretiyle (?) başlıyor , bu durum geçersizdir. Bu nedenle, Apigee Edge,500 Internal Server Errorhata koduylaprotocol.http.BadPathdeğerini döndürür.3. örnek
3. örnek: AssignMessage politikası
target.urldeğişkenini güncelleme<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>
urldeğerinin aşağıdaki bileşenlere sahip olduğunu unutmayın:- şema:
https - authority:
mocktarget.apigee.net - path:
?echo
Bu örnekte de yol, eğik çizgi (
/) yerine soru işaretiyle (?) başlıyor, bu da geçersizdir. Bu nedenle, Apigee Edge,500 Internal Server Errorhata koduylaprotocol.http.BadPathdeğerini döndürür.- şema:
Çözünürlük
URL spesifikasyonu
RFC 3986, bölüm 3: Söz Dizimi Bileşenleri uyarınca path bileşeni zorunludur ve her zaman "/" ile başlamalıdır. 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 geçerli bir yola sahip olduğundan ve her zaman eğik çizgi (/) ile başladığından 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 değerini belirlemek için başka değişkenler kullanıyorsanız
target.url, diğer değişkenlerin geçersiz bir yola sahip 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 sonucunun veya sonucunun geçersiz bir yol içermediğinden emin olun.
- Bazı durumlarda yolda kaynak adı olmayabilir. Bu durumda, yolun en azından düz eğik çizgi (
Yukarıda bahsedilen örneklerde bu sorunu aşağıdaki şekilde düzeltebilirsiniz:
1. örnek
1. örnek: JavaScript politikası
target.urldeğişkenini güncellemeBu sorunu düzeltmek için aşağıdaki örnekte gösterildiği gibi,
urldeğişkeninde soru işareti (?) yerine eğik çizgi (/) kullanın:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
2. örnek
2. örnek: İstek başlığındaki değere göre
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);
Aşağıda gösterildiği gibi bu sorunu düzeltmek için istek başlığının bir parçası olarak geçerli bir yol (ör.
/user) ilettiğinizden emin olun:PathÖrnek İstek:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
3. örnek
3. örnek: AssignMessage politikası
target.urldeğişkenini güncelliyorAssignMessage politikasının
<Value>öğesine geçerli bir yol ekleyin. Yani, soru işaretini (?)<Value>öğesinde eğik çizgiyle (/) değiştirin ve bu sorunu düzeltmek için aşağıda gösterildiği gibihttps://mocktarget.apigee.net/echoolarak ayarlayın:<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>
Spesifikasyon
Apigee Edge, arka uç sunucusu URL'sindeki
pathbileşenin aşağıdaki özelliklere göre her zaman eğik çizgiyle (/) başlamasını bekler: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ıma ihtiyacınız varsa Toplanması gereken teşhis bilgileri başlıklı makaleyi inceleyin.
Teşhis bilgilerini toplamalıdır
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'sinin adı
500 Internal Server Erroröğesiniprotocol.http.BadPathhata 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
Referanslar