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:
- Apigee Edge kullanıcı arayüzünde oturum açın. Uygun bir role sahip bir kullanıcı olarak oturum açmanız gerekir.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
- Hata kodunu daraltmak için Proxy filtresini seçebilirsiniz.
- Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi Hata Kodu
protocol.http.TooBigBodyve Durum Kodu413içeren bir hücre seçin:
protocol.http.TooBigBodyhata koduyla ilgili bilgiler 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 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ğeriprotocol.http.TooBigBodyve İ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
proxyise, Hata Kodu değeriprotocol.http.TooBigBodyise 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. - Durum Kodu:
Trace
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştirin ve şunlardan birini yapın:
413 Request Entity Too Largehatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını yapın ve
413 Request Entity Too Largehatasını yeniden oluşturun.
Tüm Akış Bilgilerini Göster'in etkinleştirildiğinden emin olun.
- Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
- 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
- İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
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:
- İ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
- hata:
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"}}}
- hata:
- İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
Aşama Ayrıntıları bölümünde Okunan Değişkenler'e gidin.
- 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:
15360204Sıkıştırılmış
2. senaryo: İstek yükü sıkıştırılmış biçimde
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 tarafından neden
413hatası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:
- Özel bulut kullanıcısıysanız HTTP
413hatalarıyla ilgili temel 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 (sorun geçmişte yaşandıysa)
413hatası olup olmadığını veya413ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. - X-Apigee-fault-code'un
protocol.http.TooBigBodydeğeriyle eşleşen413hataları 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.TooBigBodyX-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.TooBigBodyX-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
413değerini döndürür.
Neden: İstek yükü boyutu, izin verilen sınırdan daha büyük
Teşhis
- 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.
- Hata Kaynağı değeri
policyveyaproxyise 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. - 1. adımda belirlenen İstek Yükü Boyutu'nu 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. Neden: İstek yük boyutu, sıkıştırma açıldıktan sonra izin verilen sınırı aşıyor
- 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:
- İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz yoksa Çözüm bölümüne gidin.
- İstemci uygulaması tarafından yapılan gerçek 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ırdan daha büyük olduğunu fark ederseniz sorunun nedeni budur.
Örnek İstek:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
Yukarıdaki örnekte, dosya
test15mbfileyaklaşı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
- 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.
- Hata Kaynağı değeri
policyveyaproxyise 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. - 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.
- 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:
- Başarısız olan istek için izleme yakaladıysanız İzleme ve
- client.received.content.length değişkeninin değerini belirleme
- İstemciden gelen istekte Content-Encoding:
gzipbaşlığının bulunup bulunmadığını doğrulayın.
- 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:
gzipise bu hatanın nedeni budur.
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
- İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz yoksa Çözüm bölümüne gidin.
- İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- İstekte iletilen yükün boyutunu ve istekte gönderilen
Content-Encodingbaşlığını doğrulayın. 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.gzdosyası boyut sınırının altında olsa da sıkıştırılmamıştest15mbfiledosyasının boyutu yaklaşık 15 MB veContent-Encodingüstbilgisigzip.Başka bir istemci kullanıyorsanız gönderilen yük boyutunu ve
Content-Encodingüstbilgisiningzipolarak ayarlanıp ayarlanmadığını öğrenmek için istemci günlüklerini alın.
- İstekte iletilen yükün boyutunu ve istekte gönderilen
Mesaj işleyici günlükleri
Mesaj İşleyici günlüklerini kullanarak doğrulamak için:
- Özel Cloud kullanıcısıysanız HTTP
413hatalarıyla ilgili temel bilgileri belirlemek için Mesaj İşleyici günlüklerini kullanabilirsiniz. Mesaj İşleyici günlüklerini kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.logBelirli bir süre boyunca (sorun geçmişte yaşandıysa)
413hataları olup olmadığını veya413ile 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"
- Aşağıdakilere benzer
system.logsatırları görürsünüz (TotalReadvechunkCountsizin 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
- 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
RequestTooLargehatasınıprotocol.http.TooBigBodyhata koduyla birlikte gösterdiği anlamına gelir.
- Başarısız olan istek için izleme yakaladıysanız İzleme ve
Çö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
- İ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.
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
- İ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.
- Herkese açık bulut kullanıcısıysanız istek ve yanıt yükü boyutu için maksimum sınır,
Request/response sizeiçin Apigee Edge Sınırları'nda belirtildiği gibidir. - Ö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.
- Mesaj İşleyici makinesinde,
/opt/apigee/edge-message- processor/confdizinindeHTTPRequest.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 komutun örnek sonucu aşağıdaki gibidir:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
Yukarıdaki örnek çıktıda,
HTTPRequest.body.buffer.limitözelliğininhttp.propertiesiçinde10mdeğ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ı
413hatası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ı
413hatası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_logNerede: 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