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 413 Request Entity Too Large HTTP durum kodunu ve protocol.http.TooBigBody hata 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ı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 yükü boyutu, izin verilen sınırdan büyük İstemci uygulaması tarafından Apigee Edge'e HTTP isteği kapsamında gönderilen yük boyutu, Apigee Edge'de izin verilen sınırı aşıyor. Edge Public ve Private Cloud kullanıcıları
İstek yükü boyutu, sıkıştırma açıldıktan sonra izin verilen sınırı aşıyor İstemci uygulaması tarafından Apigee Edge'e HTTP isteği kapsamında sıkıştırılmış biçimde gönderilen yük boyutu, Apigee Edge tarafından sıkıştırması açıldığında 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çmanız gerekir.
  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 daraltmak için Proxy filtresini seçebilirsiniz.
  6. Hata Kodunu Zaman ile karşılaştırın.
  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 koduyla ilgili bilgiler 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 olan isteğin satırını genişletin. Ardından, Günlükler penceresinde ayrıntıları aşağıda gösterildiği gibi not 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ıları not edin:

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

    Hata Kaynağı değeri proxy, Hata Kodu değeri protocol.http.TooBigBody 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: İstek yükü, sıkıştırılmış biçimde gönderildi

    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): 15264 (~15 kB)

    Hata Kaynağı değeri proxy ise, Hata Kodu değeri protocol.http.TooBigBody ise ve İstek Uzunluğu 10 MB'tan küçükse istemciden gelen HTTP isteğinin, sıkıştırılmış biçiminde izin verilen sınırın altında bir istek yükü boyutuna sahip olduğu ancak yük boyutu Apigee tarafından sıkıştırılmadığında izin verilen sınırı aştığı anlamına gelir.

Trace

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

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

  3. Başarısız olan isteklerden birini seçip izlemeyi 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ğıdaki bilgileri göz önünde bulundurun:

    • Content-Encoding: mevcut değil
    • Content-Length: 15360204

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

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

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

    • Content-Encoding: gzip
    • Content-Length: 14969
    • Content-Type: application/x-gzip
  5. İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
  6. Hatayı genellikle aşağıdaki örnekte gösterildiği gibi Request Received from Client (İstemciden İstek Alındı) aşamasından sonraki bir akışta görürsünüz:

  7. İzden hatanın değerini not edin. Yukarıdaki örnek izde şunlar gösterilmektedir:
    • hata: Body buffer overflow
    • error.class: com.apigee.errors.http.user.RequestTooLarge
  8. Response Sent to Client'a (İstemciye Gönderilen Yanıt) gidin ve izlemedeki hata değerlerini not edin. Aşağıdaki örnek izlemede şunlar gösterilmektedir:

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

  11. Aşağıdakileri belirten client.received.content.length değişkeninin değerini belirleyin:
    • İsteğin sıkıştırılmamış biçimde gönderildiğindeki gerçek yük boyutu ve
    • Yük sıkıştırılmış biçimde gönderildiğinde, Apigee tarafından sıkıştırma açıldıktan sonraki istek yükünün boyutu. Bu senaryoda her zaman izin verilen sınırın (10 MB) değeriyle aynı olur.

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

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

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

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

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

    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 tarafından neden 413 hatasının döndürüldüğü açıklanmaktadır:
    Senaryo client.received.content.length değerinin değeri Hatanın nedeni
    Sıkıştırılmamış biçimde istek yükü ~15 MB Boyut > izin verilen 10 MB sınırı.
    Sıkıştırılmış biçimde istek yü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. Özel bulut kullanıcısıysanız HTTP 413 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

  3. Belirli bir süre boyunca (sorun geçmişte yaşandıysa) 413 hatası olup olmadığını veya 413 ile hâlâ başarısız olan istekler olup olmadığını kontrol edin.
  4. X-Apigee-fault-code'un protocol.http.TooBigBody değeriyle eşleşen 413 hataları bulursanız X-Apigee-fault-source değerini belirleyin.

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

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

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

    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)

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

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

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

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

    Bu senaryoda, istek sıkıştırılmış biçimde gönderilmiş olabileceğinden ve Apigee Edge tarafından sıkıştırma açıldıktan sonra yükün boyutu sınırı aştığından İstek Uzunluğu izin verilen sınırın altında olsa bile Apigee Edge 413 değerini döndürür.

Neden: İstek yükü boyutu, izin verilen sınırdan daha büyük

Teşhis

  1. API İzleme, İzleme Aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu, Hata Kaynağını ve İstek Yükü Boyutunu belirleyin. Bu işlem, Genel teşhis adımları bölümünde Senaryo 1 (sıkıştırılmamış) ile açıklanmıştır.
  2. Hata Kaynağı değeri policy veya proxy ise bu, 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ğunu gösterir.
  3. 1. adımda belirlenen İstek Yükü Boyutu'nu doğrulayın.
  4. Aşağıdaki adımları uygulayarak gerçek isteği kontrol edip istek yükü boyutunun gerçekten izin verilen 10 MB sınırından büyük olup olmadığını da doğrulayabilirsiniz:
    1. İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz yoksa Çözüm bölümüne gidin.
    2. İstemci uygulaması tarafından yapılan gerçek 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ırdan daha büyük olduğunu fark ederseniz sorunun nedeni budur.
      3. Örnek İstek:

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

        Yukarıdaki örnekte, dosya test15mbfile 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: İstek yük boyutu, sıkıştırma açıldıktan sonra 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 olarak ayarlanırsa gzip, Apigee, istek yükünü açar. Apigee, sıkıştırmayı açma işlemi sırasında yükün boyutunun 10 MB'tan büyük olduğunu tespit ederse (izin verilen sınır), sıkıştırmayı açma işlemine devam etmez ve 413 Request Entity Too Large ile protocol.http.TooBigBody hata koduyla hemen yanıt verir.

Teşhis

  1. API İzleme, İzleme Aracı veya NGINX Erişim günlüklerini kullanarak gözlemlenen hatanın Hata Kodunu, Hata Kaynağını ve İstek Yükü boyutunu belirleyin. Bu işlem, Yaygın teşhis adımları bölümünde 2. senaryo (sıkıştırılmış) ile açıklanmıştır.
  2. Hata Kaynağı değeri policy veya proxy ise bu, 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ğunu gösterir.
  3. 1. adımda belirlenen Request Payload Size'ı (İstek Yükü Boyutu) doğrulayın.
    • Yük boyutu, izin verilen 10 MB sınırını aşıyorsa hatanın nedeni budur.
    • Yük boyutu, izin verilen 10 MB sınırından küçükse istek yükü sıkıştırılmış biçimde iletiliyor olabilir. Bu durumda, sıkıştırılmış istek yükünün sıkıştırılmamış boyutunu kontrol edin.
  4. Aşağıdaki yöntemlerden birini kullanarak istemciden 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ırı aşıp aşmadığını doğrulayabilirsiniz:

    Trace

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

    1. Başarısız olan istek için izleme yakaladıysanız İzleme ve
      1. client.received.content.length değişkeninin değerini belirleme
      2. İstemciden gelen istekte Content-Encoding: gzip başlığının bulunup bulunmadığını doğrulayın.
    2. client.received.content.length değişkeninin değeri 10 MB'tan büyükse, izin verilen sınır ve istek başlığı Content-Encoding: gzip ise bu hatanın nedeni budur.

    Gerçek istek

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

    1. İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz yoksa Çözüm bölümüne gidin.
    2. İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
      1. İstekte iletilen yükün boyutunu ve istekte gönderilen Content-Encoding başlığını doğrulayın.
      2. Yükün sıkıştırılmamış boyutunun, Apigee Edge'de izin verilen sınırı aşıp aşmadığı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 dosyası boyut sınırının altında olsa da sıkıştırılmamış test15mbfile dosyasının boyutu yaklaşık 15 MB ve Content-Encoding üstbilgisi gzip.

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

    Mesaj işleyici günlükleri

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

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

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

    3. Belirli bir süre boyunca (sorun geçmişte yaşandıysa) 413 hataları olup olmadığını veya 413 ile hâlâ başarısız olan istekler olup olmadığını kontrol edin.

      Aşağıdaki arama dizelerini kullanabilirsiniz:

      grep -ri "chunkCount"
      
      grep -ri "RequestTooLarge"
      
    4. Aşağıdakilere benzer system.log satırları görürsünüz (TotalRead ve chunkCount sizin durumunuzda 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 okunan bayt sayısının 10 MB'tan fazla olduğunu belirlediği anda işlemi durdurur 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 büyük olduğu ve boyut 10 MB sınırını aşmaya başladığında Apigee'nin RequestTooLarge hatasını protocol.http.TooBigBody hata koduyla birlikte gösterdiği anlamına gelir.

Çözünürlük

Boyutu düzelt

1. seçenek [Önerilen]: İstemci uygulamasının, izin verilen sınırdan daha büyük yük boyutu göndermesini engelleyin

  1. İsteğin / yük boyutunun, Sınırlar bölümünde tanımlanan izin verilen sınırdan daha fazla olmasının nedenini analiz edin.
  2. Bu durum istenmiyorsa istemci uygulamanızı, izin verilen sınırdan daha küçük bir istek / yük boyutu gönderecek şekilde değiştirin.

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

    curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
    
  3. İsteniyorsa ve izin verilen sınırdan daha fazla istek/yük göndermek istiyorsanız sonraki seçeneklere gidin.

İmzalanmış URL Kalıbı

2. seçenek [Önerilir]: Apigee JavaCallout içinde imzalı URL kalıbını kullanın

Apigee, 10 MB'tan büyük yükler için GitHub'daki Edge Callout: Signed URL Generator örneğinde gösterildiği gibi, Apigee JavaCallout içinde imzalı URL'ler kalıbının kullanılmasını önerir.

Canlı Yayın

3. seçenek : Akışı kullanma

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

CwC

4. seçenek : Arabellek sınırını artırmak için CwC mülkünü kullanma

Varsayılan boyut artırılırsa performans sorunları yaşanabileceğ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ırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için Yönlendiricide veya ileti işlemcisinde ileti boyutu sınırını ayarlama başlıklı makaleyi inceleyin.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Request/response size için Apigee Edge Sınırları'nda belirtilen izin verilen sınırı aşan yük boyutları 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ı'nda belirtildiği gibidir.
  2. Özel bulut 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.

Mevcut sınır nasıl kontrol edilir?

Bu bölümde, tesisin HTTPRequest.body.buffer.limit Mesaj İşleyiciler'de yeni bir değerle güncellendiğinin nasıl doğrulanacağı 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 komutun örnek sonucu aşağıdaki gibidir:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
  3. Yukarıdaki örnek çıktıda, HTTPRequest.body.buffer.limit özelliğinin http.properties içinde 10m değeriyle ayarlandığını unutmayın.

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

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ı
  • 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 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ı
  • 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

    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