431 İstek Başlığı Alanları Çok Büyük - TooBigHeaders

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Belirti

İstemci uygulaması, API'ye yanıt olarak protocol.http.TooBigHeaders hata koduyla birlikte 431 Request Header Fields Too Large HTTP durum kodunu alıyor çağrısının en iyi yoludur.

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 Apigee Edge, HTTP isteğinin bir parçası olarak Apigee Edge'de izin verilen sınır şu şekildedir: RFC 6585, bölüm 5: 431 İstek Üstbilgisi Alanları Çok Büyük.

Bu hatanın olası nedenleri aşağıda açıklanmıştır:

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
İstek Başlıkları boyutu izin verilen sınırdan büyük İstemci uygulaması tarafından Apigee Edge, Apigee Edge'de izin verilen sınırdan büyüktü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:

  1. Apigee Edge kullanıcı arayüzünde uygun role sahip olur.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analiz > API İzleme > İnceleme sayfası.
  4. Hataları gözlemlediğiniz zaman aralığını seçin.
  5. Zaman ile Hata Kodu'nun grafiğini çizin.
  6. protocol.http.TooBigHeaders hata koduna sahip bir hücre seçin ve aşağıda gösterildiği gibi 431 durum kodu:

    ( resmi büyüt)

  7. protocol.http.TooBigHeaders hata koduyla ilgili bilgileri görürsünüz aşağıdaki gibidir:

    ( resmi büyüt)

  8. Günlükleri görüntüle'yi tıklayın ve başarısız isteğin olduğu satırı genişletin:

    ( resmi büyüt)

  9. Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:

    • Durum Kodu: 431
    • Hata Kaynağı: apigee
    • Hata Kodu: protocol.http.TooBigHeaders.
    • İstek Uzunluğu(bayt): 32150 (> 25 KB)
  10. Hata Kaynağı apigee veya MP değerine sahipse Hata Kodu, protocol.http.TooBigHeaders değerine sahiptir ve İstek Uzunluğu 25 KB'tan büyük olduğunda, bu boyut HTTP isteğinin bir parçası olarak istemci uygulaması tarafından gönderilen tüm istek üstbilgileri, daha Apigee'de izin verilen sınır'a dokunun.

İzleme aracı

NGINX

NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:

  1. Private Cloud kullanıcısıysanız NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz: HTTP 431 hatalarıyla ilgili önemli bilgileri belirler.
  2. NGINX erişim günlüklerini kontrol edin:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Konum: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.

  3. Belirli bir sürede 431 hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya hâlâ başarısız olan bir istek varsa 431
  4. X-Apigee-fault-code'da 431 hatası bulursanız protocol.http.TooBigHeaders değeriyle eşleşir ve ardından X-Apigee-fault-source.'un değerini ifade eder.

    NGINX erişim günlüğünden yukarıdaki örnek giriş, X-Apigee-fault-code ve X-Apigee-fault-source:

    Yanıt Başlıkları Değer
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    İstek Uzunluğuna dikkat edin: 40159 (40 KB, 25 KB'tan büyüktür, Apigee Edge'de istek başlıkları için izin verilen sınır)

    Yukarıdaki örnek günlük girişinde, X-Apigee-fault-source aşağıdaki değere sahiptir: apigee veya MP olması durumunda, X-Apigee-fault-code protocol.http.TooBigHeaders ve İstek Uzunluğu 40 KB'tır. Bu boyut, Apigee'de izin verilen sınırdan fazla - 25 KB. Bu durum, modelin HTTP'nin bir parçası olarak istemci uygulaması tarafından gönderilen tüm istek başlıklarının toplam boyutu isteği, Apigee Edge'de izin verilen 25 KB sınırını aştı.

Neden: İstek Başlığı boyutu izin verilen sınırın üzerinde

Teşhis

  1. Şu öğe için Hata Kodu, Hata Kaynağı ve İstek-Uzunluğu boyutunu belirleyin. API Monitoring veya NGINX Erişim günlükleri kullanılırken aşağıdaki sayfada açıklandığı gibi bir hata gözlemlendi: Yaygın teşhis adımları.
  2. Hata Kaynağı apigee veya MP değerine sahipse Hata Kodu protocol.http.TooBigHeaders değerine sahiptir. İstek Uzunluğu 25 KB'tan büyükse bu değer istemci uygulaması tarafından Apigee'ye gönderilen istek boyutunun Apigee Edge'de izin verilen sınır.
  3. İstek üstbilgilerinin boyutunun 25 KB'lık sınırı aştığını doğrulamak için şunlardan birini kullanabilirsiniz: aşağıdaki yöntemleri kullanabilirsiniz:

    Hata mesajı

    Hata mesajını kullanarak doğrulamak için:

    Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa faultstring inceleyin. faultstring, şunu belirtiyor: İstek Başlıklarının toplam boyutu, izin verilen 25 KB'lık sınırı aştı.

    Örnek hata mesajı:

    "faultstring":"request headers size exceeding 25,600"
    

    Gerçek istek

    Gerçek isteği kullanarak doğrulamak için:

    İstemci uygulamanın yaptığı asıl isteğe erişiminiz varsa ardından aşağıdaki adımları uygulayın:

    1. İstekte iletilen üstbilgilerin boyutunu doğrulayın.
    2. Üstbilgilerin toplam boyutunun Apigee Edge'de izin verilen sınır bir açıklama ekleyin.

      Ö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, üstbilgilerin toplam boyutu header0, header1, header2, ve header3 25 KB'tan büyükse, yani 25 K ASCII karakterden (bayt) fazla.

      Başka bir istemci kullanıyorsanız istemci günlüklerini inceleyebilir ve Apigee Edge'e gönderilen istek satırının büyüklüğünü öğrenmeye çalışın.

    İleti işleyen günlükleri

    İleti İşleyici günlüklerini kullanarak doğrulamak için:

    Private Cloud kullanıcısıysanız Mesaj İşleyici günlüklerini kullanarak İstek Başlıkları boyutunun Apigee Edge'de izin verilen sınır.

    1. İleti İşleyici günlüklerini kontrol edin:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Belirli bir sırasında 431 hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya herhangi bir istek varsa hâlâ 431 ile başarısız oluyor. Aşağıdaki arama dizelerini kullanabilirsiniz.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. system.log sağlayıcısından şuna benzer satırlar göreceksiniz:
      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)
      

      Şu sayfadaki message = request headers size exceeding 25,600 metni: yukarıdaki hata mesajı, toplam İstek Başlığı boyutunun şundan daha fazla olduğunu gösteriyor 25 KB. Bu nedenle, Apigee Edge istisnayı com.apigee.errors.http.user.RequestHeadersTooLarge ve iade İstemci uygulamalarına hata koduyla birlikte protocol.http.TooBigHeaders 431 durum kodu.

Çözünürlük

Boyutu sabitle

1. Seçenek [Önerilen]: İstemci uygulamasının istek başlıklarını toplam boyut izin verilen sınırdan büyük

  1. Belirli bir istemcinin neden büyük boyutlu İstek Başlığı göndermesi gerektiğini analiz edin Bu boyut, toplam başlık boyutunu şu şekilde tanımlanan izin verilen sınırdan fazla yapar: Sınırlar.
  2. İstenmiyorsa istemci uygulamanızı, İzin verilen sınırdan küçük bir boyuta sahip başlık isteyin.

    Yukarıda açıklanan örnekte uzun başlığı ileterek sorunu çözebilirsiniz value parametresini eklemeniz gerekir:

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. İsterseniz ve izin verilen sınırın üzerinde bir üstbilgi göndermek istiyorsanız seçeneğini belirleyin.

CwC

2. seçenek : İstek satırı sınırını artırmak için CwC mülkünü kullanma

Apigee, CwC özelliğini kullanabilirsiniz. Ayrıntılı bilgi için Mesaj İşleyici'de istek satırı sınırını belirleyin

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun şunları göndermemesini bekler Boyutları belgelendiği şekilde izin verilen sınırın üzerinde olan İstek/Yanıt Başlıkları for İstek/Yanıt Başlığı Boyutu Sınırı için Apigee Edge Sınırları.

  1. Herkese açık Cloud kullanıcısıysanız İstek/Yanıt Başlığı boyutu için belirtildiği şekilde İstek ve Yanıt Başlıkları Apigee Edge Sınırları.
  2. Private Cloud kullanıcısıysanız varsayılan maksimum sayıyı değiştirmiş olabilirsiniz. sınırı (önerilen bir uygulama olmasa bile). Aşağıdaki talimatları uygulayarak maksimum İstek Üstbilgisi boyut sınırını belirleyebilirsiniz: Geçerli sınır nasıl kontrol edilir?

Geçerli sınır nasıl kontrol edilir?

Bu bölümde, HTTPRequest.headers.limit mülkünün şu özelliklere sahip olduğunu nasıl doğrulayacağınız açıklanmaktadır: Mesaj İşleyicilerde yeni bir değerle güncellendi.

  1. İleti İşleyici makinesinde özelliği arayın. HTTPRequest.headers.limit /opt/apigee/edge-message-processor/conf dizini ve için kontrol et: hangi değerin ayarlandığını aşağıda gösterildiği gibi görebilirsiniz:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Yukarıdaki komuttan elde edilen örnek sonuç aşağıdaki gibidir:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
    .
  3. Yukarıdaki örnek çıkışta, HTTPRequest.headers.limit özelliğine dikkat edin. http.properties içinde 25k değeriyle ayarlandı.

    Bu, Özel için Apigee'de yapılandırılan İstek Başlığı boyutu sınırının olduğunu gösterir. Bulut boyutu 25 KB'tır.

Spesifikasyon

Apigee Edge, istemci uygulamasının isteği gönderin. İsteğin, toplam boyutu belirtilen sınırın üzerinde olan başlıklar içermesi durumunda Apigee, aşağıdaki RFC'ye göre 431 Request Header Fields Too Large öğesini yayınlar özellikler:

Spesifikasyon
RFC 6585, bölüm 5: 431 İstek Üstbilgisi Alanları Çok Büyük

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

Aşağıdaki teşhis bilgilerini toplayın, ardından 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ı
  • 431 hatasını yeniden oluşturmak için kullanılan curl komutunu 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
  • Kuruluş adı
  • Ortam adı
  • API Proxy paketi
  • Başarısız API istekleri için izleme dosyası
  • 431 hatasını yeniden oluşturmak için kullanılan curl komutunu tamamlayın
  • 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