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:
- Uygun role sahip bir kullanıcı olarak Apigee Edge kullanıcı arayüzünde oturum açın.
Sorunu incelemek istediğiniz kuruluşa geçin
- Analiz > API İzleme > Araştır sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
- Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
- Hata Kodu'nu Zamana göre çizin.
Aşağıda gösterildiği gibi Hata Kodu
protocol.http.TooBigBody
ve Durum Kodu413
içeren bir hücre seçin:protocol.http.TooBigBody
hata kodu ile ilgili bilgi aşağıda gösterildiği gibi görüntülenir:- 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 Koduprotocol.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 Koduprotocol.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. - Durum Kodu:
Trace
Hatayı İzle aracını kullanarak teşhis etmek için:
- İ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
Tüm Akış Bilgilerini Göster seçeneğinin etkinleştirildiğinden emin olun.
- Başarısız isteklerden birini seçip izi inceleyin.
- İ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
- İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
Hatayı genellikle aşağıda gösterildiği gibi İstemciden Alınan İstek aşamasından sonraki bir akışta bulabilirsiniz:
- İ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
- hata:
İ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"}}}
- hata:
- İzdeki AX (Analytics Verileri Kaydedilen) Aşaması'na gidin ve onu tıklayın.
Aşama Ayrıntıları bölümünde, Okunan Değişkenler bölümüne gidin.
- 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
- 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:
- Private Cloud kullanıcısıysanız HTTP
413
hatalarıyla ilgili önemli bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Belirli bir süre boyunca
413
hatası olup olmadığını (sorun geçmişte olduysa) veya413
nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın. - 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 edinSı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 edinBu 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
- 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.
- Hata Kaynağı
policy
veyaproxy
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. - 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. Şuraya git: Neden: Sıkıştırma açıldıktan sonra istek yükü boyutu, izin verilen sınırı aşıyor
- 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:
- İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz yoksa Çözüm'e gidin.
- İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- İstekte iletilen yükün boyutunu doğrulayın.
- Yükün boyutunun Apigee Edge'de izin verilen sınırın üzerinde olduğunu görürseniz sorunun nedeni budur.
Ö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
- 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.
- Hata Kaynağı
policy
veyaproxy
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. - 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.
- İ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:
- Başarısız olan istek için bir iz yakaladıysanız İzleme ve
- client.received.content.length değişkeninin değerini belirleme
- İstemciden gelen isteğin Content-Encoding:
gzip
üstbilgisini içerip içermediğini doğrulayın
- 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:
- İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz yoksa Çözüm'e gidin.
- İstemci uygulaması tarafından yapılan asıl isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- İstekte gönderilen
Content-Encoding
başlığı ile birlikte istekte iletilen yükün boyutunu doğrulayın. 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 veContent-Encoding
üst bilgisigzip
'tır.Başka bir istemci kullanıyorsanız gönderilen yük boyutunu ve
Content-Encoding
başlığınıngzip
olarak ayarlanıp ayarlanmadığını öğrenmek için istemci günlüklerini alın.
- İstekte gönderilen
Mesaj İşleyici günlükleri
İleti İşleyici günlüklerini kullanarak doğrulamak için:
- Private Cloud kullanıcısıysanız HTTP
413
hatalarıyla ilgili önemli bilgileri belirlemek için Mesaj İşleyici günlüklerini kullanabilirsiniz. Message Processor günlüklerini kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Belirli bir süre boyunca
413
hatası olup olmadığını (sorun geçmişte olduysa) veya413
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"
system.log
alanında aşağıdakine benzer satırlar bulacaksınız (sizin içinTotalRead
vechunkCount
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
- 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 veprotocol.http.TooBigBody
olarak hata kodu içerir.
- Başarısız olan istek için bir iz yakaladıysanız İzleme ve
Çö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
- 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.
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
- 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.
- 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. - 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.
- Mesaj İşleyici makinesinde,
/opt/apigee/edge-message- processor/conf
dizinindeHTTPRequest.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
- Yukarıdaki komuttan alınan örnek sonuç aşağıdaki gibidir:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
Yukarıdaki örnek çıkışta,
HTTPRequest.body.buffer.limit
özelliğininhttp.properties
içinde10m
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 komutuNGINX 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