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 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:

  1. Apigee Edge kullanıcı arayüzünde oturum açın. Uygun bir role sahip bir kullanıcı olarak oturum açın.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
  4. Hataları gözlemlediğiniz belirli zaman aralığını seçin.
  5. Hata Kodunu Zaman ile karşılaştırın.
  6. Aşağıda gösterildiği gibi hata kodu protocol.http.TooBigHeaders ve durum kodu 431 içeren bir hücre seçin:

    ( daha büyük resmi görüntüle)

  7. Aşağıda gösterildiği gibi, hata kodu protocol.http.TooBigHeaders hakkındaki bilgileri görürsünüz:

    ( daha büyük resmi görüntüle)

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

    ( daha büyük resmi görüntüle)

  9. 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)
  10. Hata Kaynağı apigee veya MP değerine, Hata Kodu protocol.http.TooBigHeaders değ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:

  1. Özel bulut kullanıcısıysanız HTTP 431 hatalarıyla ilgili temel 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

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

  3. Belirli bir süre boyunca 431 hataları olup olmadığını (sorun geçmişte yaşandıysa) veya 431 ile hâlâ başarısız olan istekler olup olmadığını kontrol edin.
  4. X-Apigee-fault-code değerinin protocol.http.TooBigHeaders değeriyle eşleştiği 431 hataları 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.TooBigHeaders
    X-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 apigee veya MP, X-Apigee-fault-code değeri protocol.http.TooBigHeaders ve 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

  1. 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.
  2. Hata Kaynağı değeri apigee veya MP ise, Hata Kodu değeri protocol.http.TooBigHeaders ise 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.
  3. 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 faultstring bö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:

    1. İstekte iletilen başlıkların boyutunu doğrulayın.
    2. 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, header2 ve header3 ü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.

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

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

    2. Belirli bir süre boyunca (sorun geçmişte yaşandıysa) 431 hataları olup olmadığını veya 431 ile 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"
      
    3. system.log ile 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,600 metni, toplam istek üstbilgileri boyutunun 25 KB'tan fazla olduğunu gösterir. Bu nedenle, Apigee Edge com.apigee.errors.http.user.RequestHeadersTooLarge istisnasını oluşturur ve protocol.http.TooBigHeaders hata koduyla 431 durum 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

  1. 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.
  2. 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>" }'
    
  3. İ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.

  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ı'nda İstek/Yanıt Başlığı boyutu için belirtilen sınırdır.
  2. Ö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.

  1. Mesaj İşleyici makinesinde, HTTPRequest.headers.limit özelliğini /opt/apigee/edge-message-processor/conf dizininde 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
    
  2. Yukarıdaki komutun örnek sonucu aşağıdaki gibidir:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
  3. Yukarıdaki örnek çıktıda, HTTPRequest.headers.limit özelliğinin http.properties içinde 25k değ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ı
  • 431 hatasını yeniden oluşturmak için kullanılan curl komutunun 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ı
  • 431 hatasını yeniden oluşturmak için kullanılan curl komutunun tamamı
  • NGINX erişim günlükleri /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Nerede: 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