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

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.TooBigBody hata koduyla birlikte 413 Request Entity Too Large HTTP durum kodunu alır.

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 uygulaması tarafından HTTP isteğinin bir parçası olarak Apigee Edge'e gönderilen yük boyutu Apigee Edge'de izin verilen sınırdan büyükse ortaya çıkar .

Bu hatanın olası nedenleri aşağıda belirtilmiştir :

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 HTTP isteğinin bir parçası olarak gönderilen yük boyutu, Apigee Edge'de izin verilen sınırın üzerindedir. Edge Herkese Açık ve Özel Bulut kullanıcıları
Sıkıştırmayı açtıktan sonra istek yükü boyutu, izin verilen sınırı aşıyor Apigee Edge'e yapılan HTTP isteğinin bir parçası olarak istemci uygulaması tarafından sıkıştırılmış biçimde gönderilen yük boyutu, Apigee Edge tarafından sıkıştırıldığında izin verilen sınırı aşıyor. 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 kodunu daraltmak için Proxy filtresini seçebilirsiniz.
  6. Hata Kodu'nu Zamana göre çizin.
  7. Aşağıda gösterildiği gibi Hata Kodu protocol.http.TooBigBody ve Durum Kodu 413 içeren bir hücre seçin:

  8. protocol.http.TooBigBody hata kodu ile ilgili bilgi aşağıda gösterildiği gibi görüntülenir:

  9. Günlükleri görüntüle'yi tıklayın ve başarısız isteğin satırını genişletin. Daha sonra Günlükler penceresinden aşağıda gösterilen ayrıntıları not edin :

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

    1. Senaryo: Sıkıştırılmamış biçimde gönderilen istek yükü

    Günlükler penceresinde aşağıdaki ayrıntıları not edin:

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

    Hata Kaynağı proxy değerine, Hata Kodu protocol.http.TooBigBody değerine ve İstek Uzunluğu 10 MB'tan büyükse bu durum, istemciden gelen HTTP isteğinin Apigee'de izin verilen sınırdan daha büyük bir istek yükü boyutuna sahip olduğunu gösterir.

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

    2. Senaryo: Sıkıştırılmış biçimde gönderilen yük isteme

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

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

    Hata Kaynağı proxy değerine, Hata Kodu protocol.http.TooBigBody değerine ve İstek Uzunluğu'nun 10 MB'tan küçük olması, istemciden gelen HTTP isteğinin sıkıştırılmış biçiminde izin verilen sınırdan daha düşük bir istek yükü boyutuna sahip olduğunu, ancak Apigee tarafından sıkıştırılmamış haliyle yük boyutunun izin verilen sınırın üzerinde olduğunu gösterir.

Trace

Hatayı İzle aracını kullanarak teşhis etmek için:

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

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

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

    1. Senaryo: Sıkıştırılmamış biçimde gönderilen istek yükü

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

    • Content-Encoding: (Mevcut değil)
    • Content-Length: 15360204

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

    2. Senaryo: Sıkıştırılmış biçimde gönderilen yük isteme

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

    • İçerik Kodlaması: gzip
    • Content-Length: 14969
    • İçerik Türü: application/x-gzip
  5. İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
  6. Hatayı genellikle aşağıda gösterildiği gibi İstemciden Alınan İstek aşamasından sonraki bir akışta bulabilirsiniz:

  7. İzdeki hatanın değerini not edin. Yukarıdaki örnek iz şunları gösterir:
    • hata: Body buffer overflow
    • error.class: com.apigee.errors.http.user.RequestTooLarge
  8. İstemciye Gönderilen Yanıt'a gidin ve izdeki hatanın değerlerini not edin. Aşağıdaki örnek iz şunları gösterir:

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

  11. client.received.content.length değişkeninin değerini belirleyin. Bu değer şunları gösterir:
    • İstek yükünün sıkıştırılmamış biçimde gönderildiğindeki gerçek boyutu ve
    • Yükün sıkıştırılmış biçimde gönderildiğinde, Apigee tarafından sıkıştırmanın kaldırılması sırasında istek yükünün boyutu. Bu senaryoda değer, her zaman izin verilen sınırın değeriyle (10 MB) aynı olur.

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

    1. Senaryo: Yükü sıkıştırılmamış biçimde isteme

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

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

    2. Senaryo: Yükü sıkıştırılmış biçimde isteme

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

  12. Aşağıdaki tabloda, client.received.content.length değişkeninin değerine bağlı olarak iki senaryoda Apigee 413 hatasının neden döndürüldüğü açıklanmaktadır:
    Senaryo client.received.content.length değeri Hatanın nedeni
    Yükü sıkıştırılmamış biçimde iste ~15 MB Boyut > izin verilen 10 MB sınır.
    Sıkıştırılmış biçimde yük isteme ~10 MB

    Sıkıştırma açılırken 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 HTTP 413 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

  3. Belirli bir süre boyunca 413 hatası olup olmadığını (sorun geçmişte olduysa) veya 413 nedeniyle başarısız olan bir istek 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 413 hatası bulursanız X-Apigee-fault-code değerinin değerini belirleyin.

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

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

    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ğ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: 15360440 (14,6 MB > izin verilen sınır) alanını not edin

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

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

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

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

    Bu senaryoda Apigee Edge, İstek Uzunluğu izin verilen sınırın altında olsa da 413 değerini döndürür. Bunun nedeni, isteğin sıkıştırılmış biçimde gönderilmiş olması ve yükün boyutunun Apigee Edge tarafından sıkıştırılmasının ardından sınırı aşması olabilir.

Neden: İstek Yük Boyutu izin verilen sınırdan büyük

Teşhis

  1. API İzleme, Trace Aracı veya NGINX erişim günlüklerini kullanarak gözlemlenen hata için Hata Kodu, Hata Kaynağı ve İstek Yük Boyutu'nu, 1. Senaryo (sıkıştırılmamış) ile Yaygın teşhis adımları bölümünde açıklandığı şekilde belirleyin.
  2. Hata Kaynağı policy veya proxy değerine sahipse istemci uygulaması tarafından Apigee'ye gönderilen istek yükü boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğu anlamına gelir.
  3. 1. adımda belirlenen İstek Yük Boyutu'nu doğrulayın.
  4. Aşağıdaki adımları uygulayıp gerçek isteği kontrol ederek istek yükü boyutunun gerçekten 10 MB'tan fazla olup olmadığını doğrulayabilirsiniz:
    1. İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz yoksa Çözüm'e gidin.
    2. İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
      1. İstekte iletilen yükün boyutunu doğrulayın.
      2. Yükün boyutunun Apigee Edge'de izin verilen sınırın üzerinde olduğunu görürseniz sorunun nedeni budur.
      3. Örnek İstek:

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

        Yukarıdaki örnekte, test15mbfile dosyası yaklaşık 15 MB'tır. Başka bir istemci kullanıyorsanız gönderilen yük boyutunu öğrenmek için istemci günlüklerini alın.

Çözünürlük

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

Neden: Sıkıştırma açıldıktan sonra, İstek Yük Boyutu izin verilen sınırı aşıyor

İstek yükü sıkıştırılmış biçimde gönderilirse ve istek başlığı Content-Encoding, gzip, olarak ayarlanırsa istek yükünü açar. Sıkıştırmayı açma işlemi sırasında Apigee, yük boyutunun 10 MB'tan, izin verilen sınırı üzerinde olduğunu belirlerse sıkıştırmayı daha fazla durdurur ve hemen 413 Request Entity Too Large ile protocol.http.TooBigBody hata koduyla yanıt verir.

Teşhis

  1. API İzleme, İzleme Aracı veya NGINX Erişimi günlükleri kullanılarak gözlemlenen hata için Hata Kodu, Hata Kaynağı ve İstek Yük boyutu'nu, 2. Senaryo (sıkıştırılmış) ile Yaygın teşhis adımları bölümünde açıklandığı şekilde belirleyin.
  2. Hata Kaynağı policy veya proxy değerine sahipse istemci uygulaması tarafından Apigee'ye gönderilen istek yükü boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğu anlamına gelir.
  3. 1. adımda belirlenen İstek Yük Boyutu'nu doğrulayın.
    • Yük boyutu 10 MB'tan büyükse hatanın nedeni budur.
    • Yük boyutu izin verilen sınır olan 10 MB'tan küçükse istek yükü sıkıştırılmış biçimde aktarılabilir. Bu durumda, sıkıştırılmış istek yükünün sıkıştırılmamış boyutunu kontrol edin.
  4. İstemciden gelen isteğin sıkıştırılmış biçimde gönderilip gönderilmediğini ve sıkıştırılmamış boyutun izin verilen sınırdan büyük olup olmadığını aşağıdaki yöntemlerden birini kullanarak doğrulayabilirsiniz:

    Trace

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

    1. Başarısız olan istek için bir iz yakaladıysanız İzleme ve
      1. client.received.content.length değişkeninin değerini belirleme
      2. İstemciden gelen isteğin Content-Encoding: gzip üstbilgisini içerip içermediğini doğrulayın
    2. client.received.content.length değişkeninin değeri 10 MB'tan, izin verilen sınırdan ve client.received.content.length istek üst bilgisinden büyükse 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 Çözüm'e gidin.
    2. İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
      1. İstekte gönderilen Content-Encoding başlığı ile birlikte istekte iletilen yükün boyutunu doğrulayın.
      2. Yükün sıkıştırılmamış boyutunun Apigee Edge'de izin verilen sınırın üzerinde olup olmadığını kontrol edin

        Örnek istek:

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

        Yukarıdaki örnekte, test15mbfile.gz dosya boyutu sınırından küçüktür. Ancak, sıkıştırılmamış test15mbfile dosyasının boyutu yaklaşık 15 MB ve Content-Encoding üst bilgisi gzip'tır.

        Başka bir istemci kullanıyorsanız gönderilen yük boyutunu ve Content-Encoding başlığının gzip olarak ayarlanıp ayarlanmadığını öğrenmek için istemci günlüklerini alın.

    Mesaj İşleyici günlükleri

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

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

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

    3. Belirli bir süre boyunca 413 hatası olup olmadığını (sorun geçmişte olduysa) veya 413 nedeniyle başarısız olan isteklerin olup olmadığını görmek için arama yapın.

      Aşağıdaki arama dizelerini kullanabilirsiniz:

      grep -ri "chunkCount"
      
      grep -ri "RequestTooLarge"
      
    4. system.log alanında aşağıdakine benzer satırlar bulacaksınız (sizin için TotalRead ve chunkCount farklı olabilir):
      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ırmayı açma işlemi sırasında Mesaj İşleyici, toplam okuma baytının 10 MB'tan büyük olduğunu belirlediği anda durur ve şu satırı yazdırır:
      Message is too large.  TotalRead 10489856 chunkCount 2570
      

      Bu, İstek Yük Boyutu'nun 10 MB'tan büyük olduğu anlamına gelir ve boyut 10 MB'lık sınırı aşmaya başladığında Apigee, RequestTooLarge hatası verir ve protocol.http.TooBigBody olarak hata kodu içerir.

Çözünürlük

Boyutu düzelt

1. Seçenek [Önerilen]: İstemci uygulamasının, yük boyutunu izin verilen sınırın üzerinde göndermemesi için sorunu düzeltin

  1. Belirli bir istemcinin, Sınırlar bölümünde tanımlanan izin verilen sınırın üzerinde istek / yük boyutu gönderme nedenini analiz edin.
  2. Bu istenen bir durum değilse istemci uygulamanızı, izin verilen sınırın altında istek / yük boyutu gönderecek şekilde değiştirin.

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

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

  3. Tercih ediliyorsa ve izin verilen sınırın üzerinde bir istek/yük göndermek istiyorsanız sonraki seçeneklere gidin.

İmzalanmış URL Modeli

2. Seçenek [Önerilen]: Apigee JavaScript'te imzalı URL'ler kalıbı kullanın

Apigee, 10 MB'tan büyük yükler için GitHub'daki Edge Callout: İmzalı URL Oluşturucu örneğinde gösterilen Apigee JavaCall'da imzalı URL kalıbı kullanmanızı önerir.

Canlı Yayın

3. Seçenek : Yayın özelliğini kullanma

API proxy'nizin çok büyük istekleri ve/veya yanıtları işlemesi gerekiyorsa Apigee'de akış özelliğini etkinleştirebilirsiniz.

CwC

4. Seçenek : Arabellek sınırını artırmak için CwC özelliğini kullanın

Varsayılan boyut artırılırsa performans sorunları olabileceğinden, bu seçenek yalnızca önerilen seçeneklerden hiçbirini kullanamadığınızda kullanılmalıdır.

Apigee, istek ve yanıt yükü boyutu sınırını artıran bir CwC özelliği sunar. Ayrıntılar için Yönlendirici veya Mesaj İşleyici'de mesaj boyutu sınırını ayarlama bölümüne bakın

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun Apigee Edge Sınırları bölümünde Request/response size için belirtildiği üzere izin verilen sınırın üzerinde yük boyutu göndermemesini bekler.

  1. Herkese Açık Bulut kullanıcısıysanız istek ve yanıt yükü boyutu için maksimum sınır Request/response size için Apigee Edge Sınırları bölümünde belirtildiği şekildedir.
  2. Private Cloud kullanıcısıysanız istek ve yanıt yükü boyutu için varsayılan 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 yükü boyutu sınırını belirleyebilirsiniz.

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

Bu bölümde, HTTPRequest.body.buffer.limit özelliğinin Mesaj İşleyenlerde 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.body.buffer.limit özelliğini arayın ve aşağıdaki komutu kullanarak hangi değerin ayarlandığını kontrol edin:
    grep -ri "HTTPRequest.body.buffer.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.body.buffer.limit=10m
    
  3. Yukarıdaki örnek çıkışta, HTTPRequest.body.buffer.limit özelliğinin http.properties içinde 10m değeriyle ayarlandığına dikkat edin.

    Bu, Private Cloud için Apigee'de yapılandırılan istek yükü boyutunun 10 MB olduğunu gösterir.

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

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