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.BadFormData 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":"Bad Form Data",
"detail":{
"errorcode":"protocol.http.BadFormData"
}
}
}Form verileri
Bu sorunu gidermenin ayrıntılarına geçmeden önce form verilerinin ne olduğunu görelim.
Form verileri, kullanıcı tarafından genellikle öğeler içeren bir HTML formu aracılığıyla sağlanan bilgilerdir bir metin giriş kutusu, düğme veya onay kutusu gibi. Form verileri genellikle bir dizi anahtar/değer çiftlerinin bir parçası olarak kullanabilirsiniz.
Form veri aktarımı
- İçerik Türü: application/x-www-form-urlcoding
- Form verilerinin boyutu küçükse veriler şunları içeren anahtar/değer çiftleri olarak gönderilir:
- Her iki anahtardaki karakterler, Formlar - Bölüm 17.13.4.1
Content-Type: application/x-www-form-urlencodedbaşlığı
Form verilerini içeren örnek istek:
curl https://HOSTALIAS/somepath -H "Content-Type: application/x-www-form-urlencoded" -d "username=abc@google.com&pasword=secret123"
- Anahtarlar ve değerlerdeki alfanümerik olmayan karakterler
kodlanan yüzde, yani bir karakter üçlüceği olarak temsil edilir
Yüzde işareti ve ardından iki on altılı basamaktan oluşan
%HHbelirli bir karakterin ASCII kodunu temsil eder. - Bu nedenle, form verilerinde yüzde işaretine (
%) izin verilse de özel bir kaçış dizisinin başlangıcı olarak yorumlanır. Bu nedenle, form verilerinin anahtar veya değerde yüzde işaretini (%) içeriyorsa bu işaret iletilmelidir%25,, yüzde işareti için ASCII kodunu temsil eder (%) karakter.
- Form verilerinin boyutu küçükse veriler şunları içeren anahtar/değer çiftleri olarak gönderilir:
- İçerik Türü: çok parçalı/form-veriler
Büyük miktarlarda ikili verileri veya ASCII olmayan içeren metinler iletmek istiyorsanız kullanıyorsanız verileri
Content-Type:çok parçalı/form-veri: Formlar - Bölüm 17.13.4.2
Olası nedenler
Bu hata yalnızca aşağıdaki koşulların tamamı karşılandığında ortaya çıkar:
- İstemci tarafından Apigee Edge'e gönderilen HTTP isteği şunları içerir:
Content-Type: application/x-www-form-urlencodedve- Yüzde işareti (
%) veya yüzde işareti olan form verileri (%) ve ardından şu nedenle izin verilmeyen geçersiz onaltılık karakterler gelir: Formlar - Bölüm 17.13.4.1.
Apigee Edge'deki API proxy'si, karakter içeren belirli form parametrelerini okur veya AttributionMessage politikası.
Örneğin, form verileri yüzde işaretini (
%) olduğu gibi ( kodlaması) veya yüzde işareti (%) ve ardından geçersiz onaltılık anahtar ve/veya değerde yer alıyorsa bu hatayı alırsınız.Bu hatanın olası nedenleri aşağıda açıklanmıştır:
Neden Açıklama Şunun için geçerli sorun giderme talimatları: İstekteki form parametrelerinde izin verilmeyen karakterler var İstemci tarafından HTTP isteğinin bir parçası olarak iletilen form parametreleri kullanılmasına izin verilmeyen karakterler bulunmalıdır. 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
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.
protocol.http.BadFormDatahata koduna sahip bir hücre seçin: aşağıda gösterilmiştir:
protocol.http.BadFormDatahata koduyla ilgili bilgi: 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 bulunduğu satırı genişletin.
- Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
- Durum Kodu:
500 - Hata Kaynağı:
proxy - Hata Kodu:
protocol.http.BadFormData - Hata Politikası:
extractvariables/EV-ExtractFormParams
- Durum Kodu:
- Hata Kaynağı
proxyise Hata Koduprotocol.http.BadFormDatave Hata Politikası boş olmamalıdır. Hata bölümünde belirtilen politika kullanılırken hatanın oluştuğunu gösterir Politika, kullanılmasına izin verilmeyen karakterler bulunmalıdır. - Bu örnekte X-Apigee-fault-policy
extractvariables/EV- ExtractFormParams,şeklindedir. Bu durum, EV-ExtractFormParams, formu okurken veya ayıklarken başarısız oldu parametreleridir.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştir
ve şunlardan birini yapın:
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ından yararlanın ve hatanın nerede olduğunu bulun meydana geldi.
Hatayı genellikle aşağıda gösterildiği gibi politikalardan birinde bulursunuz:
Yukarıdaki örnek izlemede hatanın
EV-ExtractFormParamsadlı ExtractDeğişkenler politikası.Başarısız olan politikanın ardından Hata adlı akışa gidin:
- İzdeki aşağıdaki değerleri not edin:
hata:
Bad Form Dataeyalet:
PROXY_REQ_FLOWerror.class:
com.apigee.rest.framework.BadRequestExceptionBad Form Datahatasının değeri, formun parametreleri, kullanılmasına izin verilmeyen bazı karakterler içeriyordu.- Eyaletin değeri
PROXY_REQ_FLOW,, hata, API proxy'sinin istek akışında oluşmuştur.
- İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidin ve şunu tıklayın: somut olarak ortaya koyar.
Aşama Ayrıntıları - Hata Başlıkları bölümüne ilerleyin ve X-Apigee-fault-code, X-Apigee-fault-source değerlerini belirleyerek ve X-Apigee-fault-policy bölümünü aşağıda görebilirsiniz:
X-Apigee-fault-code ve X-Apigee-fault-source değerlerinin aynısı sırasıyla
protocol.http.BadFormDatavepolicyve X-Apigee-fault-policy sayfası boş değildir. Bu, hatanın X-Apigee-fault-policy bölümünde belirtilen ilgili politika, herhangi bir karakter içeren form verilerini (form parametreleri) okuma veya ayıklama kullanılmasına izin verilmez.Yanıt başlıkları Değer X-Apigee-fault-code protocol.http.BadFormDataX-Apigee-fault-source policyX-Apigee-fault-policy extractvariables/EV-ExtractFormParams- Bu örnekte X-Apigee-fault-policy
extractvariables/EV- ExtractFormParams,(yani ExtractVariables politikası şu ada sahiptir) Formu okurken veya ayıklarkenEV-ExtractFormParamsbaşarısız oldu parametreleridir.
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Private Cloud kullanıcısıysanız NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz:
HTTP
500 Internal Server Errorile ilgili önemli bilgileri belirler. 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.BadFormData(sorun varsa olup olmadığını kontrol edin) veya hâlâ başarısız olan talepler500 X-Apigee-fault-code ile herhangi bir
500hatası bulursanızprotocol.http.BadFormDatadeğeriyle eşleşiyorsa X-Apigee-fault-source'un değerini tespit edip X-Apigee-fault-policy.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.BadFormDataX-Apigee-fault-source policyX-Apigee-fault-policy extractvariables/EV-ExtractFormParams- X-Apigee-fault-code, X-Apigee-fault-source
sırasıyla
protocol.http.BadFormData,policyve X-Apigee-fault-policy sayfası boş değildir. Bu, hatanın X-Apigee-fault-policy, bölümünde belirtilen ilgili politikanın herhangi bir karakter içeren form verilerini (form parametreleri) okuma veya ayıklama kullanılmasına izin verilmez. - Bu örnekte X-Apigee-fault-policy
extractvariables/EV- ExtractFormParams,(yani ExtractVariables politikası şu ada sahiptir) Form okunurkenEV-ExtractFormParamsbaşarısız oldu parametreleridir.
Neden: İstekteki form parametrelerinde izin verilmeyen karakterler var
Teşhis
- Açıklanan şekilde API İzleme, İzleme aracı veya NGINX erişim günlüklerini kullanarak
500 Internal Server Erroriçin Hata Kodu, Hata Kaynağı ve Hata Politikası'nı belirleyin Genel teşhis adımları başlıklı makaleyi inceleyin. - Hata Kodu
protocol.http.BadFormDataise Hata Kaynağıproxyveyapolicydeğeri ve Hata Politikası şu değil: boşsa, bu değer,,'nda belirtilen politikanın (form parametreleri) kullanarak form verilerini okuma veya ayıklama. - Hata Politikası'nda belirtilen politikayı inceleyin ve aşağıdakileri belirleyin:
bilgi:
- Kaynak: Politikanın yanıt verebilmeniz için kritik önem taşır.
- Form parametreleri:
politikası.
Örnek 1
1. örnek: Form parametrelerini çıkaran ExtractVariables politikası:
<ExtractVariables name="EV-ExtractFormParms"> <DisplayName>EV-ExtractFormParams</DisplayName> <Source>request</Source> <FormParam name="username"> <Pattern ignoreCase="false">{username}</Pattern> </FormParam> <FormParam name="password"> <Pattern ignoreCase="false">{password}</Pattern> </FormParam> <VariablePrefix>forminfo</VariablePrefix> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </ExtractVariables>Yukarıdaki ExtractVariables politikasında:
Kaynak:
requestBu,
<Source>öğesi ile gösterilirForm parametreleri:
usernamevepasswordBu,
<Pattern><FormParam>öğe
Bu,
usernameve/veyapassword, istemci tarafından HTTP isteğinin bir parçası olarak Apigee Edge, kullanılmasına izin verilmeyen karakterler içeriyor.Örnek 2
2. örnek: Form parametrelerini kopyalayan atamayla ilgili politika:
<AssignMessage continueOnError="false" enabled="true" name="AM-CopyFormParams"> <Copy source="request"> <FormParams> <FormParam name="username"/> <FormParam name="password"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Yukarıdaki ExtractVariables politikasında:
Kaynak:
requestBu,
source<Copy>öğeForm parametreleri:
usernamevepasswordBu,
name<FormParam>öğe
Bu,
usernameveyapasswordform parametrelerinin Her ikisi de istemci tarafından HTTP isteği olarak Apigee Edge'e iletilen herhangi bir izin verilmeyen karakterlerin kullanılmasına izin verilmez.
İzin verilmeyen karakter olup olmadığını kontrol edin 3. adımda tanımlanan form parametrelerindeki karakterler kullanıldı aşağıdaki yöntemlerden birini kullanın:
İzleme aracı
İzleme aracını kullanarak doğrulamak için:
- Başarısız olan isteğin izini aşağıdaki sayfada açıklandığı gibi yakaladıysanız: Yaygın teşhis adımları'nı tıklayın, ardından unutmayın.
- Form parametrelerinin herhangi bir karakter içeren
kullanılmasına izin verilmeyen veriler,
Yukarıdaki 3. adıma ve
- Müşteriden İstek Alındı aşamasına gidin.
Aşama Ayrıntıları bölümüne gidin ve İçerik İsteyin.
( resmi büyüt)
- Yukarıdaki örnekte,
passwordform parametresinin yüzde işaretini (%) içerir. - Yüzde işareti (
%) yüzde kodlaması özel karakterler içeriyorsa olduğu gibi kullanılamaz. olduğunu unutmayın. - Bu nedenle Apigee Edge,
Hata kodunu içeren
500 Internal Server Errorprotocol.http.BadFormData.
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
- Hedef sunucuya gönderilen gerçek isteğe erişiminiz yoksa ardından Çözünürlük'e gidin.
- Apigee Edge'e gönderilen isteğe erişiminiz varsa
şu adımları uygulayın:
- Form verilerinin içeriğini inceleyin ve
yüzde işareti (
%) gibi kullanılmasına izin verilmez veya yüzde işareti (%) ve ardından geçersiz onaltılık karakterler yer alır.Örnek 1
1. Örnek İstek: İstek kapsamında form verileri
curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=123456abc123&client_secret=c23578%ZY"
Bu örnekte,
client_secretöğesinin yüzde işareti (%) ve ardından gelen geçersiz on altılı karakterler:ZY.Örnek 2
2. Örnek İstek: Dosyada iletilen form verileri:
curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d @form_data.xml
form_data.xml dosyasının içeriği:
xml=<user><username>abc1234@google.com</username><password>qwerty12345!@#$%</password></user>
Bu örnekte,
passwordöğesinin yüzde işaretini (%) içerdiğine ve olduğu gibi aktarılır.
- Form verilerinin içeriğini inceleyin ve
yüzde işareti (
- Yukarıdaki iki örnekte, HTTP isteğinin bir parçası olarak Apigee Edge, kullanılmasına izin verilmeyen karakterler içeriyor.
- Bu nedenle Apigee Edge
500 Internal Server Errorile yanıt veriyorprotocol.http.BadFormDatahata koduyla.
Çözünürlük
- Form verilerinin veya parametrelerinin hem anahtarlarındaki hem de değerlerindeki özel karakterlerin bulunduğundan emin olun. HTTP isteğinin bir parçası olarak gönderilen iletiler her zaman bölümünde açıklandığı gibi kodlanır. Form Verileri: application/x-www-form-urlcoding.
- Yukarıda açıklanan örnekler için sorunları aşağıdaki şekilde düzeltebilirsiniz:
Örnek 1
1. Örnek: İstek kapsamında iletilen form verileri:
Geçerli kullanın Belirli bir karakterin ASCII koduyla eşleşen onaltılık karakterler. Örneğin, dolar işaretini (
$) göndermek istiyorsanız%24kullanın. aşağıdaki gibidir:curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=123456abc123&client_secret=c23578%24"
Örnek 2
2. Örnek İstek: Dosyada iletilen form verileri:
curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d @form_data.xml
form_data.xml dosyasının içeriği:
Şunu kullanın: yüzde (
%) işareti için yüzdelik kodlaması ise dosyayı%25aşağıda gösterildiği gibidir:xml=<user><username>abc1234@google.com</username><password>qwerty12345!!@#$%25</password></user>
Spesifikasyon
Apigee Edge, form verilerinin aşağıdaki özelliklere göre gönderilmesini bekler:
| Spesifikasyon |
|---|
| Form Verileri: application/x-www-form-urlcoding |
Hâlâ Apigee Destek Ekibi'nden yardım almanız gerekiyorsa teşhis bilgileri bölümüne bakın.
Teşhis bilgileri toplanmalıdır
Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki 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'si adı
- Yeniden oluşturmak için kullanılan
curlkomutunu tamamlayın Hata koduyla500 Internal Server Errorprotocol.http.BadFormData - 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