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-urlencoded
baş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
%HH
belirli 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-urlencoded
ve- 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.BadFormData
hata koduna sahip bir hücre seçin: aşağıda gösterilmiştir:protocol.http.BadFormData
hata 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ğı
proxy
ise Hata Koduprotocol.http.BadFormData
ve 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 Error
hatası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-ExtractFormParams
adlı 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 Data
eyalet:
PROXY_REQ_FLOW
error.class:
com.apigee.rest.framework.BadRequestException
Bad Form Data
hatası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.BadFormData
vepolicy
ve 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.BadFormData
X-Apigee-fault-source policy
X-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-ExtractFormParams
baş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 Error
ile 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
500
hatası 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
500
hatası bulursanızprotocol.http.BadFormData
değ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.BadFormData
X-Apigee-fault-source policy
X-Apigee-fault-policy extractvariables/EV-ExtractFormParams
- X-Apigee-fault-code, X-Apigee-fault-source
sırasıyla
protocol.http.BadFormData
,policy
ve 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-ExtractFormParams
baş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 Error
için Hata Kodu, Hata Kaynağı ve Hata Politikası'nı belirleyin Genel teşhis adımları başlıklı makaleyi inceleyin. - Hata Kodu
protocol.http.BadFormData
ise Hata Kaynağıproxy
veyapolicy
değ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:
request
Bu,
<Source>
öğesi ile gösterilirForm parametreleri:
username
vepassword
Bu,
<Pattern>
<FormParam>
öğe
Bu,
username
ve/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:
request
Bu,
source
<Copy>
öğeForm parametreleri:
username
vepassword
Bu,
name
<FormParam>
öğe
Bu,
username
veyapassword
form 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,
password
form 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 Error
protocol.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 Error
ile yanıt veriyorprotocol.http.BadFormData
hata 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%24
kullanı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ı%25
aş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
curl
komutunu tamamlayın Hata koduyla500 Internal Server Error
protocol.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_log
Yer: 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