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

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak protocol.http.TooBigHeaders hata koduna sahip 431 Request Header Fields Too Large HTTP durum 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 üstbilgilerinin toplam boyutu, RFC 6585, bölüm 5: 431 İstek Başlığı Alanları Çok Büyük uyarınca Apigee Edge'de izin verilen sınırdan büyükse ortaya çıkar.

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ının boyutu izin verilen sınırdan büyük İstemci uygulaması tarafından Apigee Edge'e yapılan HTTP isteğinin bir parçası olarak gönderilen tüm üst bilgilerin toplam boyutu, Apigee Edge'de izin verilen sınırın üzerindedir. Edge Herkese Açık ve Özel Bulut kullanıcıları

Yaygın 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. Uygun role sahip bir kullanıcı olarak Apigee Edge kullanıcı arayüzünde oturum açın.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analiz > API İzleme > Araştır sayfasına gidin.
  4. Hataları gözlemlediğiniz belirli zaman aralığını seçin.
  5. Hata Kodu'nu Zamana göre çizin.
  6. Aşağıda gösterildiği gibi protocol.http.TooBigHeaders hata koduna ve 431 durum koduna sahip bir hücre seçin:

    ( büyük resmi göster)

  7. protocol.http.TooBigHeaders hata koduyla ilgili bilgileri aşağıda gösterildiği gibi görürsünüz:

    ( büyük resmi göster)

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

    ( büyük resmi göster)

  9. Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:

    • Durum Kodu: 431
    • Hata Kaynağı: apigee
    • Hata Kodu: protocol.http.TooBigHeaders.
    • İstek Uzunluğu(baytlar): 32150 (> 25 KB)
  10. Hata Kaynağı apigee veya MP değerine sahipse Hata Kodu protocol.http.TooBigHeaders değerine ve İstek Uzunluğu 25 KB'tan büyükse bu durum, HTTP isteğinin bir parçası olarak istemci uygulaması tarafından gönderilen tüm istek üst bilgilerinin toplam boyutunun Apigee'de izin verilen sınırın üzerinde olduğunu gösterir.

İzleme aracı

NGINX

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

  1. Private Cloud kullanıcısıysanız HTTP 431 hatalarıyla ilgili önemli bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz.
  2. NGINX erişim günlüklerini kontrol edin:

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

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

  3. Belirli bir süre boyunca 431 hatası olup olmadığını (sorun geçmişte olduysa) veya 431 nedeniyle başarısız olan isteklerin olup olmadığını görmek için arama yapın.
  4. X-Apigee-fault-code değeriyle eşleşen X-Apigee-fault-code özelliğinde 431 hatası bulursanız X-Apigee-fault-code değerinin değerini belirleyin.

    NGINX erişim günlüğünden yukarıdaki örnek giriş, X-Apigee-fault-code ve X-Apigee-fault-code için aşağıdaki değerlere sahiptir:

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

    İstek Uzunluğunu Not: 40159 (40 KB, Apigee Edge'de 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 apigee veya MP değerine, X-Apigee-fault-code ise protocol.http.TooBigHeaders değerine ve Request Length (İstek Uzunluğu) 40 KB'tır. Bu değer, Apigee'de izin verilen sınır olan 25 KB'tan daha büyüktür. Bu, istemci uygulaması tarafından HTTP isteğinin bir parçası olarak gönderilen tüm istek üst bilgilerinin toplam boyutunun Apigee Edge'de izin verilen 25 KB sınırını aştığını açıkça gösterir.

Neden: İstek Üstbilgileri boyutu izin verilen sınırdan büyük

Teşhis

  1. API Monitoring veya NGINX Access günlükleri kullanılarak gözlemlenen hata için Yaygın teşhis adımları bölümünde açıklandığı şekilde Hata Kodu, Hata Kaynağı ve İstek Uzunluğu boyutunu belirleyin.
  2. Hata Kaynağı apigee veya MP değerine, Hata Kodu alanında protocol.http.TooBigHeaders değerine ve İstek Uzunluğu'nun 25 KB'tan büyük olması, istemci uygulaması tarafından Apigee'ye gönderilen istek boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğunu gösterir.
  3. Aşağıdaki yöntemlerden birini kullanarak istek başlıkları boyutunun izin verilen 25 KB'lık sınırı 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 faultstring dokümanına 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:

    1. İstekte iletilen üstbilgilerin boyutunu doğrulayın.
    2. Üst bilgilerin toplam boyutunun Apigee Edge'de izin verilen sınırın üzerinde olduğunu 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, header2 ve header3 başlıklarının toplam boyutu 25 KB'tan büyüktür, yani 25 K ASCII karakterinden (bayt) fazladır.

      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 İşleyici günlükleri

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

    Private Cloud kullanıcısıysanız İstek Başlıkları boyutunun Apigee Edge'de izin verilen sınırı aşıp aşmadığını doğrulamak için Mesaj İşleyici günlüklerini kullanabilirsiniz.

    1. Message Processor günlüklerini kontrol edin:

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

    2. Belirli bir süre boyunca 431 hatası olup olmadığını (sorun geçmişte gerçekleştiyse) veya 431 nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın. Aşağıdaki arama dizelerini kullanabilirsiniz.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. system.log alanında aşağıdakine 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)
      

      Yukarıdaki hata mesajında yer alan message = request headers size exceeding 25,600 metni, toplam İstek Başlığı boyutunun 25 KB'tan büyük olduğunu göstermektedir. Bu nedenle Apigee Edge, com.apigee.errors.http.user.RequestHeadersTooLarge istisnasını atar ve istemci uygulamalarına hata kodu içeren 431 durum kodunu protocol.http.TooBigHeaders döndürür.

Çözünürlük

Boyutu düzelt

1. Seçenek [Önerilen]: İstemci uygulamasının, toplam boyutu izin verilen sınırın üzerinde olan istek başlıklarını göndermemesi için düzeltme

  1. Belirli bir istemcinin, toplam üst bilgi boyutunun Sınırlar'da tanımlanan izin verilen sınırın üzerinde olmasını sağlayacak büyük boyutlu İstek Başlığı gönderme nedenini analiz edin.
  2. Bu istenen bir durum değilse istemci uygulamanızı, izin verilen sınırın altında İstek Başlıkları gönderecek şekilde değiştirin.

    Yukarıda açıklanan ö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>" }'
    
  3. İstenirse ve izin verilen sınırın üzerinde bir başlık göndermek istiyorsanız sonraki seçeneğe geçin.

CwC

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

Apigee, istek satırı boyutu sınırını artıran bir CwC özelliği sunar. Ayrıntılar için Mesaj İşleyici'de istek satırı sınırını ayarlama bölümüne göz atın.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları bölümünde İstek/Yanıt Başlığı Boyutu Sınırı bölümünde belirtildiği şekilde, boyutları izin verilen sınırın üzerinde olan İstek/Yanıt Başlıkları göndermemesini bekler.

  1. 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ı'ndaki İstek/Yanıt Başlığı boyutu bölümünde belirtildiği şekildedir.
  2. Private Cloud 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.

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

Bu bölümde, HTTPRequest.headers.limit özelliğinin Mesaj İşleyicilerde yeni bir değerle güncellendiğini nasıl doğrulayacağınız açıklanmaktadır.

  1. Mesaj İşleyici makinesinde, /opt/apigee/edge-message-processor/conf dizininde HTTPRequest.headers.limit özelliğini arayın ve aşağıda gösterildiği gibi hangi değerin ayarlandığını kontrol edin:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Yukarıdaki komuttan alınan ö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ğinin http.properties içindeki 25k değeriyle ayarlandığını unutmayın.

    Bu, Private Cloud için Apigee'de yapılandırılan İstek 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 üstbilgiler göndermemesini bekler. İstekte toplam boyut belirtilen sınırın üzerinde olan başlıklar olması halinde Apigee, aşağıdaki RFC özelliklerine göre 431 Request Header Fields Too Large hatası verir:

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

Apigee Desteği'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplamanız gerekiyor bölümünü inceleyin.

Teşhis bilgileri toplanmalı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 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 gözlemlenen tam hata mesajı
  • 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# gerçek değerlerle değiştirilir.

  • Mesaj İşleyici sistem günlükleri /opt/apigee/var/log/edge-message-processor/logs/system.log