Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 431 Request Header Fields Too
Large HTTP durum kodunu ve protocol.http.TooBigHeaders hata kodunu alır.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 431 Request Header Fields Too Large
Ayrıca aşağıdaki hata mesajını da görebilirsiniz:
{
"fault":{
"faultstring":"request headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Olası nedenler
Bu hata, istemci uygulaması tarafından HTTP isteğinin bir parçası olarak Apigee Edge'e gönderilen tüm istek başlıklarının toplam boyutu, RFC 6585, bölüm 5: 431 Request Header Fields Too Large uyarınca Apigee Edge'deki izin verilen sınırı aştığında oluşur.
Bu hatanın olası nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| İstek başlıklarının boyutu, izin verilen sınırı aşıyor | İstemci uygulaması tarafından Apigee Edge'e HTTP isteği kapsamında gönderilen tüm başlıkların toplam boyutu, Apigee Edge'deki izin verilen sınırı aşı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
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çı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 kodu
protocol.http.TooBigHeadersve durum kodu431içeren bir hücre seçin:
Aşağıda gösterildiği gibi, hata kodu
protocol.http.TooBigHeadershakkındaki bilgileri görürsünüz:
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:
431 - Hata Kaynağı:
apigee - Hata Kodu:
protocol.http.TooBigHeaders. - İstek Uzunluğu(bayt):
32150 (> 25 KB)
- Durum Kodu:
- Hata Kaynağı
apigeeveyaMPdeğerine, Hata Koduprotocol.http.TooBigHeadersdeğerine sahipse ve İstek Uzunluğu 25 KB'tan büyükse bu, istemci uygulaması tarafından HTTP isteğinin bir parçası olarak gönderilen tüm istek başlıklarının toplam boyutunun Apigee'de izin verilen sınırdan daha büyük olduğunu gösterir.
İzleme aracı
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Özel bulut kullanıcısıysanız HTTP
431hatalarıyla 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_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir süre boyunca
431hataları olup olmadığını (sorun geçmişte yaşandıysa) veya431ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. X-Apigee-fault-code değerinin
protocol.http.TooBigHeadersdeğeriyle eşleştiği431hataları bulursanız X-Apigee-fault-source değerini belirleyin.
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:
Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source MPİstek Uzunluğuna Dikkat Edin:
40159(40 KB, Apigee Edge'deki istek başlıkları için izin verilen sınır olan 25 KB'tan büyüktür)Yukarıdaki örnek günlük girişinde X-Apigee-fault-source değeri
apigeeveyaMP, X-Apigee-fault-code değeriprotocol.http.TooBigHeadersve Request Length (İstek Uzunluğu) 40 KB'tır. Bu değer, Apigee'de izin verilen sınır olan 25 KB'tan büyüktür. Bu, istemci uygulaması tarafından HTTP isteği kapsamında gönderilen tüm istek üstbilgilerinin toplam boyutunun, Apigee Edge'de izin verilen 25 KB sınırını aştığını açıkça gösterir.
Neden: İstek başlıklarının boyutu, izin verilen sınırı aşıyor.
Teşhis
- Ortak teşhis adımları bölümünde açıklandığı gibi, API izleme veya NGINX erişim günlükleri kullanılarak gözlemlenen hata için Hata Kodu, Hata Kaynağı ve İstek Uzunluğu boyutunu belirleyin.
- Hata Kaynağı değeri
apigeeveyaMPise, Hata Kodu değeriprotocol.http.TooBigHeadersise ve İstek Uzunluğu 25 KB'tan fazlaysa bu durum, istemci uygulaması tarafından Apigee'ye gönderilen istek boyutunun Apigee Edge'deki izin verilen sınırdan daha büyük olduğunu gösterir. - Aşağıdaki yöntemlerden birini kullanarak istek başlıklarının boyutunun izin verilen 25 KB sınırını aştığını doğrulayabilirsiniz:
Hata mesajı
Hata mesajını kullanarak doğrulamak için:
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstringbölümüne bakın.faultstring, İstek Başlıklarının toplam boyutunun izin verilen 25 KB sınırını aştığını gösterir.Örnek hata mesajı:
"faultstring":"request headers size exceeding 25,600"
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- İstekte iletilen başlıkların boyutunu doğrulayın.
Başlıkların toplam boyutunun Apigee Edge'de izin verilen sınırı aştığını görürseniz sorunun nedeni budur.
Örnek istek:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
Yukarıdaki örnekte,
header0,header1,header2veheader3üstbilgilerinin toplam boyutu 25 KB'tan fazla. Yani 25.000'den fazla ASCII karakteri (bayt) içeriyor.Başka bir istemci kullanıyorsanız istemci günlüklerini inceleyebilir ve Apigee Edge'e gönderilen istek satırının boyutunu bulmaya çalışabilirsiniz.
Mesaj işleyici günlükleri
Mesaj İşleyici günlüklerini kullanarak doğrulamak için:
Özel Cloud kullanıcısıysanız İstek Başlıkları boyutunun Apigee Edge'deki izin verilen sınırı aşıp aşmadığını doğrulamak için Mesaj İşleyici günlüklerini kullanabilirsiniz.
Mesaj İşleyici günlüklerini kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Belirli bir süre boyunca (sorun geçmişte yaşandıysa)
431hataları olup olmadığını veya431ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. Aşağıdaki arama dizelerini kullanabilirsiniz.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
system.logile ilgili aşağıdaki gibi satırlar görürsünüz:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
Yukarıdaki hata mesajında yer alan
message = request headers size exceeding 25,600metni, toplam istek üstbilgileri boyutunun 25 KB'tan fazla olduğunu gösterir. Bu nedenle, Apigee Edgecom.apigee.errors.http.user.RequestHeadersTooLargeistisnasını oluşturur veprotocol.http.TooBigHeadershata koduyla431durum kodunu istemci uygulamalarına döndürür.
Çözünürlük
Boyutu düzelt
1. seçenek [Önerilen]: İstemci uygulamasının, izin verilen sınırı aşan toplam boyutta istek üstbilgileri göndermesini engelleyin
- Belirli bir istemcinin, toplam üstbilgi boyutunu Sınırlar bölümünde tanımlanan izin verilen sınırın üzerine çıkaran büyük boyutlu istek üstbilgisi göndermesinin nedenini analiz edin.
Bu durum istenmiyorsa istemci uygulamanızı, izin verilen sınırdan daha küçük boyutta istek başlıkları gönderecek şekilde değiştirin.
Yukarıda bahsedilen örnekte, uzun başlık değerleri parametresini istek gövdesinin/yükünün bir parçası olarak ileterek sorunu düzeltebilirsiniz:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- İsteniyorsa ve izin verilen sınırdan daha fazla başlık göndermek istiyorsanız sonraki seçeneğe gidin.
CwC
2. seçenek : İstek satırı sınırını artırmak için CwC özelliğini kullanma
Apigee, istek satırı boyutu sınırını artırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için İleti işlemcisinde istek satırı sınırını ayarlama başlıklı makaleyi inceleyin.
Sınırlar
Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları'nda İstek/Yanıt Başlığı Boyut Sınırı için belgelendiği gibi izin verilen sınırı aşan boyutlarda İstek/Yanıt Başlıkları göndermemesini bekler.
- Herkese açık bulut kullanıcısıysanız İstek ve Yanıt Başlıkları boyutu için maksimum sınır, Apigee Edge Sınırları'nda İstek/Yanıt Başlığı boyutu için belirtilen sınırdır.
- Özel bulut kullanıcısıysanız İstek ve Yanıt Başlıkları boyutu için varsayılan maksimum sınırı değiştirmiş olabilirsiniz (önerilen bir uygulama olmasa da). Geçerli sınırı kontrol etme başlıklı makaledeki talimatları uygulayarak maksimum istek başlığı boyutu sınırını belirleyebilirsiniz.
Mevcut sınır nasıl kontrol edilir?
Bu bölümde, tesisin HTTPRequest.headers.limit Mesaj İşleyiciler'de yeni bir değerle güncellendiğinin nasıl doğrulanacağı açıklanmaktadır.
- Mesaj İşleyici makinesinde,
HTTPRequest.headers.limitözelliğini/opt/apigee/edge-message-processor/confdizininde arayın ve aşağıdaki gibi hangi değerin ayarlandığını kontrol edin:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- Yukarıdaki komutun örnek sonucu aşağıdaki gibidir:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
Yukarıdaki örnek çıktıda,
HTTPRequest.headers.limitözelliğininhttp.propertiesiçinde25kdeğeriyle ayarlandığını unutmayın.Bu, Apigee'de Private Cloud için yapılandırılan istek başlığı boyutu sınırının 25 KB olduğunu gösterir.
Spesifikasyon
Apigee Edge, istemci uygulamasının istek kapsamında büyük boyutlu başlıklar göndermemesini bekler. İstek, belirtilen sınırdan daha büyük bir toplam boyuta sahip başlıklar içeriyorsa Apigee, aşağıdaki RFC spesifikasyonlarına göre 431 Request Header Fields Too Large hatasını verir:
| Spesifikasyon |
|---|
| RFC 6585, bölüm 5: 431 İstek Üstbilgisi Alanları Çok Büyük |
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 toplamalıdır
Aşağıdaki teşhis bilgilerini toplayın ve ardından 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ı
431hatasını 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ı
- Kuruluş adı
- Ortam adı
- API proxy paketi
- Başarısız olan API isteklerinin izleme dosyası
431hatasını yeniden oluşturmak için kullanılancurlkomutunun tamamıNGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log