413 İstek Varlığı Çok Büyük - TooBigBody

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

Belirti

İstemci uygulaması 413 Request Entity Too Large HTTP durum kodunu alır API çağrılarına yanıt olarak protocol.http.TooBigBody hata koduyla birlikte.

Hata Mesajı

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 413 Request Entity Too Large

Ayrıca, aşağıdaki hata mesajını da görebilirsiniz:

{
   "fault":{
      "faultstring":"Body buffer overflow",
      "detail":{
         "errorcode":"protocol.http.TooBigBody"
      }
   }
}

Olası nedenler

Bu hata, istemci uygulama tarafından Apigee Edge'e gönderilen yük boyutu HTTP isteği Apigee Edge'de izin verilen sınırdan büyüktür .

Bu hatanın olası nedenleri şunlardır :

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
İstek yükü 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 yük boyutu: Apigee Edge'de izin verilen sınırdan daha fazla. Edge Herkese Açık ve Private Cloud kullanıcıları
İstek yükü boyutu, izin verilen sınırı şundan sonra aşıyor: dekompresyon HTTP'nin bir parçası olarak istemci uygulama tarafından sıkıştırılmış biçimde gönderilen yük boyutu isteği, Apigee Edge tarafından sıkıştırıldığında izin verilen sınırdan daha fazladı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. Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
  6. Zaman ile Hata Kodu'nun grafiğini çizin.
  7. Hata Kodu protocol.http.TooBigBody ve Durum Kodu 413aşağıda gösterilmiştir:

  8. protocol.http.TooBigBody hata koduyla ilgili bilgi şu şekilde gösterilir: aşağıda gösterilmiştir:

  9. Günlükleri görüntüle'yi tıklayın ve başarısız isteğin bulunduğu satırı genişletin. Daha sonra Logs (Günlükler) penceresinde, aşağıdaki ayrıntılara dikkat edin :

    Sıkıştırılmamış

    1. senaryo: İstek yükü sıkıştırılmamış biçimde gönderildi

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

    • Durum Kodu: 413
    • Hata Kaynağı: proxy
    • Hata Kodu: protocol.http.TooBigBody.
    • İstek Uzunluğu(bayt): 15360440 (~15 MB)

    Hata Kaynağı proxy değerine sahipse Hata Kodu protocol.http.TooBigBody değerine ve İstek Uzunluğu değerine sahiptir 10 MB'tan büyükse istemciden gelen HTTP isteğinin Apigee'de izin verilen sınırın üzerinde yük boyutu istemesi gerekir.

    Sıkıştırılmış

    2. senaryo: İstek yükü sıkıştırılmış biçimde gönderildi

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

    • Durum Kodu: 413
    • Hata Kaynağı: proxy
    • Hata Kodu: protocol.http.TooBigBody.
    • İstek Uzunluğu(bayt): 15264 (~15 kB)

    Hata Kaynağı proxy değerine sahipse Hata Kodu protocol.http.TooBigBody değerine ve İstek Uzunluğu 10 MB'tan küçük bir değerse istemciden gelen HTTP isteğinde sıkıştırılmış biçimde izin verilen sınırdan daha düşük yük boyutu isteyebilir, ancak yük boyutu, Apigee tarafından sıkıştırıldığında izin verilen sınırdan daha büyük.

Trace

İzleme aracını kullanarak hatayı teşhis etmek için:

  1. İzleme oturumunu etkinleştirin ve
    • 413 Request Entity Too Large hatasının oluşmasını bekleyin veya
    • Sorunu yeniden oluşturabiliyorsanız API çağrısını oluşturun ve 413 Request Entity Too Large hata
  2. Tüm Akış Bilgilerini Göster seçeneğinin etkin olduğundan emin olun.

  3. Başarısız isteklerden birini seçin ve izini inceleyin.
  4. Müşteriden İstek Alındı aşamasına gidin.

    Sıkıştırılmamış

    1. senaryo: İstek yükü sıkıştırılmamış biçimde gönderildi

    Aşağıdakileri göz önünde bulundurun:

    • Content-Encoding: Yok
    • İçerik-Uzunluk: 15360204

    Sıkıştırılmış

    2. senaryo: İstek yükü sıkıştırılmış biçimde gönderildi

    Aşağıdakileri göz önünde bulundurun:

    • İçerik Kodlaması: gzip
    • İçerik-Uzunluk: 14969
    • İçerik Türü: application/x-gzip
  5. İzlemenin farklı aşamaları arasında gezinin ve hatanın nerede oluştuğunu bulun.
  6. Hatayı genellikle İstek Alındı: Müşteri aşamasını aşağıda görebilirsiniz:

  7. İzdeki hatanın değerini not edin. Yukarıdaki örnek izde şunlar gösterilir:
    • hata: Body buffer overflow
    • error.class: com.apigee.errors.http.user.RequestTooLarge
  8. İstemciye Gönderilen Yanıt bölümüne gidin ve izler. Aşağıdaki örnek izde şunlar gösterilmektedir:

    • hata: 413 Request Entity Too Large
    • Hata İçeriği: {"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
  9. İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidin ve tıklayın.
  10. Aşama Ayrıntıları bölümünde Değişkenler Okuma'ya gidin.

  11. client.received.content.length değişkeninin değerini belirleyin. Bu değişken:
    • Sıkıştırılmamış biçimde gönderildiğinde istek yükünün gerçek boyutu ve
    • Yük olduğunda, Apigee tarafından sıkıştırılmış dosya açma işlemi yapıldığında istek yükünün boyutu sıkıştırılmış biçimde gönderilir. Bu değer, her zaman izin verilen sınırı (10 MB) olarak ayarlayın.
    ziyaret edin.

    Sıkıştırılmamış

    1. senaryo: Yükü sıkıştırılmamış biçimde isteyin

    client.received.content.length değişkeni: 15360204

    Sıkıştırılmış

    2. senaryo: Sıkıştırılmış biçimde istek yükü

    client.received.content.length değişkeni: 10489856

  12. Aşağıdaki tabloda, Apigee tarafından neden 413 hatasının iki senaryoda, client.received.content.length değişkeninin değerine göre belirleyin:
    Senaryo client.received.content.length değeri Hatanın nedeni
    Sıkıştırılmamış biçimde istek yükü Yaklaşık 15 MB Boyut > izin verilen sınır 10 MB'tır.
    Sıkıştırılmış biçimde istek yükü Yaklaşık 10 MB

    Sıkıştırma açıldığında boyut sınırı aşıldı

NGINX

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

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

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

  3. Belirli bir sürede herhangi bir 413 hatası olup olmadığını görmek için arama yapın (varsa) olup olmadığını kontrol edin) veya hâlâ başarısız olan bir istek varsa 413
  4. X-Apigee-fault-code eşleştirmesinde 413 hatası bulursanız protocol.http.TooBigBody değerini sonra da X-Apigee-fault-source.

    Sıkıştırılmamış

    1. senaryo : Sıkıştırılmamış biçimde istek yük boyutu

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

    Yanıt başlıkları Değer
    X-Apigee-fault-code protocol.http.TooBigBody
    X-Apigee-fault-sourc policy

    İstek Uzunluğu'na dikkat edin:15360440 (14,6 MB > izin verilen sınır)

    Sıkıştırılmış

    2. senaryo : Sıkıştırılmış biçimde yük boyutunu isteme

    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.TooBigBody
    X-Apigee-fault-source policy

    İstek Uzunluğu: 15264 (14,9 K < izin verilen sınır) değerine dikkat edin.

    Bu senaryoda Apigee Edge, 413 İstek Uzunluğu izin verilen sınırdan düşük çünkü istek sıkıştırılmış biçimde gönderilmiş ve yükün boyutu sınırı vardır.

Neden: İstek Yük Boyutu, izin verilen sınırın üzerinde

Teşhis

  1. Şu öğe için Hata Kodu, Hata Kaynağı ve İstek Yük Boyutu'nu belirleyin: API Monitoring, İzleme Aracı veya NGINX erişim günlükleri kullanılırken aşağıdaki sayfada açıklandığı gibi hata gözlemlendi: 1. Senaryo (sıkıştırılmamış) ile yaygın teşhis adımları.
  2. Hata Kaynağı policy veya proxy değerine sahipse bu istemci uygulama tarafından Apigee'ye gönderilen istek yükü boyutunun Apigee Edge'de izin verilen sınırı aşmayın.
  3. 1. adımda belirlenen Yük Boyutunu İste değerini doğrulayın.
  4. İstek yükü boyutunun gerçekten > 10 MB'lık sınıra izin veren: aşağıdaki adımları uygulayarak gerçek isteği kontrol edin:
    1. İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz yoksa şuraya gidin: Çözüm.
    2. İstemci uygulamanın yaptığı asıl isteğe erişiminiz varsa şu adımları uygulayın:
      1. İstekte geçirilen yükün boyutunu doğrulayın.
      2. Yük boyutunun için izin verilen sınır budur., sorunun nedeni budur.
      3. Örnek İstek:

        curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
        

        Yukarıdaki örnekte, test15mbfile dosyasının boyutu yaklaşık 15 MB'tır. Şu durumda: istemci kullanıyorsanız gönderilen yük boyutunu bulmak için istemci günlüklerini alın.

Çözünürlük

Çözünürlük'e gidin.

Neden: Yük Boyutu İsteği açma işleminden sonra izin verilen sınırı aşıyor

İstek yükü sıkıştırılmış biçimde ve istek başlığıyla gönderilirse Content-Encoding gzip, olarak ayarlandığında Apigee, isteği çözer yük. Apigee, dekompresyon açma işlemi sırasında yük boyutunun daha büyük olduğunu tespit ederse 10 MB'tan büyük sınır aşıldığında baskıyı daha fazla açma işlemi durdurulur ve buna karşılık olarak yanıt verir. 413 Request Entity Too Large ile hemen ve hata koduyla protocol.http.TooBigBody.

Teşhis

  1. Hata Kodu, Hata Kaynağı ve İstek Yük boyutunu belirleme aşağıdaki adımları izleyerek API Monitoring, İzleme Aracı veya NGINX Access günlükleri kullanıldığında gözlemlenen hata için 2. Senaryo (sıkıştırılmış) ile yaygın teşhis adımları.
  2. Hata Kaynağı policy veya proxy değerine sahipse bu, istemci uygulama tarafından Apigee'ye gönderilen istek yükü boyutunun daha büyük olduğunu gösterir. Apigee Edge'de izin verilen sınırdan daha fazla.
  3. 1. adımda belirlenen Yük Boyutunu İste'yi doğrulayın.
    • Yük boyutu > İzin verilen sınır 10 MB ise hatanın nedeni budur.
    • Yük boyutu < 10 MB izin verilen sınır ise, istek yük sıkıştırılmış biçimde aktarılır. Bu durumda, sıkıştırılmış istek yükü.
  4. İstemciden gelen isteğin sıkıştırılmış biçimde gönderilip gönderilmediğini ve Sıkıştırılmamış boyut, aşağıdakilerden biri kullanılarak izin verilen sınırdan daha büyüktü yöntemleri:

    Trace

    İzleme aracını kullanarak doğrulamak için:

    1. Başarısız istekle ilgili bir iz yakaladıysanız şurada ayrıntılı olarak açıklanan adımlara bakın: Trace ve
      1. client.received.content.length değişkeninin değerini belirleyin
      2. İstemciden gelen isteğin Content-Encoding: gzip başlık
    2. client.received.content.length değişkeninin değeri 10 MB izin verilen sınır ve istek başlığı Content-Encoding: gzip, 'ı seçin. Bu hatanın nedeni budur.

    Gerçek istek

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

    1. İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz yoksa şuraya gidin: Çözüm.
    2. İstemci uygulamanın yaptığı asıl isteğe erişiminiz varsa şu adımları uygulayın:
      1. İstekte geçirilen yükün boyutunu İstekte Content-Encoding başlığı gönderildi.
      2. Yükün sıkıştırılmamış boyutundan daha büyük olup olmadığını kontrol edin Apigee Edge'de izin verilen sınır

        Örnek istek:

        curl https://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile.gz -H "Content-Encoding: gzip" -v
        

        Yukarıdaki örnekte, test15mbfile.gz dosyası boyut sınırından küçüktür; ancak sıkıştırılmamış test15mbfile dosyasının boyutu ~15 MB'tır ve Content-Encoding üstbilgisi gzip.

        Başka bir istemci kullanıyorsanız yük boyutunu öğrenmek için istemci günlüklerini alın Content-Encoding üstbilgisinin gzip olarak ayarlanması gerekir.

    İleti işleyen günlükleri

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

    1. Private Cloud kullanıcısıysanız aşağıdakileri belirlemek için Mesaj İşleyici günlüklerini kullanabilirsiniz: HTTP 413 hatalarıyla ilgili önemli bilgiler.
    2. İleti İşleyici günlüklerini kontrol edin:

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

    3. Belirli bir sürede herhangi bir 413 hatası olup olmadığını görmek için arama yapın ( olup olmadığını kontrol edin.) veya 413 ile hâlâ başarısız olan istekler varsa bunları kontrol edin.

      Aşağıdaki arama dizelerini kullanabilirsiniz:

      grep -ri "chunkCount"
      
      grep -ri "RequestTooLarge"
      
    4. system.log sağlayıcısından aşağıdakine benzer satırlar bulacaksınız (TotalRead ile chunkCount sizin durumunuzda değişiklik gösterebilir):
      2021-07-06 13:29:57,544  NIOThread@1 ERROR HTTP.SERVICE -
        TrackingInputChannel.checkMessageBodyTooLarge()
        : Message is too large.  TotalRead 10489856 chunkCount 2570
      
      2021-07-06 13:29:57,545  NIOThread@1 INFO  HTTP.SERVICE -
        ExceptionHandler.handleException()
        : Exception trace: com.apigee.errors.http.user.RequestTooLarge
        : Body buffer overflow
      
    5. Sıkıştırma açma işlemi sırasında, İleti İşleyici toplam okunan bayt miktarı > 10 MB boyutundaysa durur ve aşağıdaki satırı yazdırır:
      Message is too large.  TotalRead 10489856 chunkCount 2570
      
      .

      Bu, İstek Yük Boyutu'nun 10 MB'tan fazla olduğu anlamına gelir ve Apigee, Boyut 10 MB'lık sınırı aşmaya başladığında RequestTooLarge hatası alırsınız hata kodu protocol.http.TooBigBody olarak

Çözünürlük

Boyutu sabitle

1. Seçenek [Önerilen]: İstemci uygulamasının yük boyutunu izin verilen sınır

  1. Belirli bir istemcinin istek / yük boyutunu izin verilenden daha fazla göndermesinin nedenini analiz edin sınır Sınırlar bölümünde tanımlandığı şekildedir.
  2. İstenmiyorsa istemci uygulamanızı istek / yük gönderecek şekilde değiştirin izin verilen sınırdan küçük.

    Yukarıda açıklanan örnekte daha küçük boyutlu bir dosya ileterek sorunu düzeltebilirsiniz. Aşağıda gösterildiği gibi test5mbfile (boyutu 5 MB) olduğunu varsayalım:

    curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
    

  3. İstenirse ve izin verilen sınırın üzerinde bir istek/yük göndermek istiyorsanız şu sayfaya gidin: sonraki seçeneklere geçelim.

İmzalı URL Kalıbı

2. seçenek [Önerilen]: Apigee JavaÇağrısında imzalı URL kalıbı kullanın

10 MB'tan büyük yük için Apigee, Apigee JavaDraft, Edge Çağrıları: GitHub'daki İmzalanmış URL Oluşturucu örneği.

Canlı Yayın

3. seçenek : Akış özelliğini kullanma

API proxy'nizin çok büyük istekleri ve/veya yanıtları işlemesi gerekiyorsa aşağıdakileri etkinleştirebilirsiniz: Apigee'de akışını sürdürebilirsiniz.

CwC

4. seçenek : Tampon sınırını artırmak için CwC özelliğini kullanma

Bu seçenek yalnızca, önerilen seçeneklerden hiçbirini kullanamadığınızda performans sorunları oluşturabilirsiniz.

Apigee, Artışına olanak tanıyan CwC izin vermeyeceksiniz. Ayrıntılı bilgi için Yönlendirici veya Mesaj İşlemcisinde mesaj boyutu sınırını belirleyin

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun Request/response size için belgelenen izin verilen sınıra göre Apigee Edge Limits.

  1. Herkese açık Cloud kullanıcısıysanız istek ve yanıt için maksimum sınır yük boyutu, Request/response size için belirtildiği gibi Apigee Edge Limits.
  2. Private Cloud kullanıcısıysanız varsayılan ayarı değiştirmiş olabilirsiniz. sınırı (önerilen bir uygulama olmasa bile) gerektirir. Maksimum istek yük boyutu sınırını, Geçerli sınır nasıl kontrol edilir?

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

Bu bölümde, HTTPRequest.body.buffer.limit mülkünün nasıl doğrulanacağı açıklanmaktadır. Mesaj İşleyenlerinde yeni bir değerle güncellendi.

  1. İleti İşleyici makinesinde özelliği arayın. HTTPRequest.body.buffer.limit ile /opt/apigee/edge-message- processor/conf dizinine gidin ve aşağıdaki komut dosyası kullanılarak hangi değerin ayarlandığını kontrol edin komut:
    grep -ri "HTTPRequest.body.buffer.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.body.buffer.limit=10m
    
    .
  3. Yukarıdaki örnek çıkışta, HTTPRequest.body.buffer.limit, şurada 10m değeriyle ayarlandı: http.properties.

    Bu, Özel için Apigee'de yapılandırılan istek yükü boyutu sınırının olduğunu gösterir. Bulut boyutu 10 MB'tır.

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ı
  • 413 hatasını yeniden oluşturmak için kullanılan tam curl komutu
  • 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ı
  • 413 hatasını yeniden oluşturmak için kullanılan tam curl komutu
  • 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