414 İstek URI'si Çok Uzun - TooBigLine

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak 414 Request-URI Too Long HTTP durum kodunu protocol.http.TooBigLine hata koduyla birlikte alır.

Hata mesajı

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

HTTP/1.1 414 Request-URI Too Long

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

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Yukarıdaki hata mesajında yer alan faultstring, Apigee Edge'deki istek satırı için izin verilen sınırı (7168 bytes yani 7 KB) içerir.

Olası nedenler

Bu hata, istemci uygulaması tarafından HTTP isteğinin bir parçası olarak Apigee Edge'e gönderilen istek satırının boyutu Apigee Edge'deki izin verilen sınırı aştığında oluşur.

Bu hatanın olası nedenlerine bakmadan önce, istek satırının ne anlama geldiğini ve boyutunun nasıl kontrol edileceğini öğrenelim.

İstek satırını anlama

Tipik bir HTTP isteği üç bölümden oluşur:

  1. Request-Line
  2. ( HTTP üstbilgileri kümesi)
  3. [ Body ]

İstek satırı, aşağıda gösterildiği gibi üç bölümden oluşur.

Request-Line = <Method> <Request-URI> <HTTP-Version>

İstemci uygulaması tarafından bir sunucuya HTTP isteği gönderildiğinde, sunucuya giden ilk satır yukarıda açıklanan Request-Line'ı içerir. Bunu üstbilgiler ve istek gövdesi/yükü izler.

Aşağıdaki örnek ekran görüntüsünde, tipik bir curl isteği, Request (İstek) bölümü (Request-Line ile birlikte) ve Response (Yanıt) bölümü gösterilmektedir.

İstek satırı boyutunu anlama

  1. Yukarıda bahsedilen örnekte, istekteki başlangıç satırı (ilk satır), Request-Line olarak da adlandırılır ve şu şekildedir:
    GET /test/ HTTP/1.1

    İstek satırı 19 ASCII characters içerdiğinden boyutu ~19 bytes'dır. Bu, Apigee Edge'deki izin verilen sınır içinde olduğundan istek herhangi bir hata olmadan işlenir ve başarılı bir yanıt alırsınız.

  2. Benzer şekilde, yukarıda gösterilen hata mesajındaki faultstring simgesinde "request line size exceeding 7,168" bulunur. Bu,istemci tarafından yapılan HTTP isteğindeki Request-Line'ın 7.168 baytı aştığını gösterir.

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 Request-URI'nin boyutu, Apigee Edge'de 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çın.
  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 Zaman ile karşılaştırın.
  6. Aşağıda gösterildiği gibi hata kodu protocol.http.TooBigLine ve durum kodu 414 içeren bir hücre seçin:

    ( daha büyük resmi görüntüle)

  7. Aşağıda gösterildiği gibi, hata kodu protocol.http.TooBigline hakkındaki bilgileri görürsünüz:

    ( daha büyük resmi görüntüle)

  8. Günlükleri görüntüle'yi tıklayın ve başarısız isteğin satırını genişletin:

    ( daha büyük resmi görüntüle)

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

    • Durum Kodu: 414
    • Hata Kaynağı: apigee
    • Hata Kodu: protocol.http.TooBigLine.
    • İstek Uzunluğu(bayt): 7244 (> 7KB)
  10. Hata Kaynağı değeri apigee veya MP ise, Hata Kodu değeri protocol.http.TooBigLine ise ve İstek Uzunluğu 7 KB'tan büyükse bu durum, istemciden gelen HTTP isteğinin Apigee'de izin verilen sınır'dan daha büyük bir istek URI'sine sahip olduğunu gösterir.

İzleme aracı

NGINX

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

  1. Özel bulut kullanıcısıysanız HTTP 414 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

    Nerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.

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

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

    İstek Uzunluğuna Dikkat Edin: 7244 (7.244 KB > izin verilen sınır)

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

Teşhis

  1. Hata Kodu, Hata Kaynağı ve İstek Uzunluğu boyutunu belirleyin. Bu değerler, Genel teşhis adımları bölümünde açıklandığı gibi API İzleme, İzleme Aracı veya NGINX Erişim günlükleri kullanılarak gözlemlenen hataya aittir.
  2. Hata Kaynağı değeri apigee veya MP ise bu, istemci uygulaması tarafından Apigee'ye gönderilen istek boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğunu gösterir.
  3. Aşağıdaki yöntemlerden birini kullanarak istek satırı boyutunun izin verilen 7 KB sınırını aştığını doğrulayabilirsiniz:

    Hata mesajı

    Hata mesajını kullanarak doğrulamak için:

    Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa faultstring bölümüne bakın. faultstring, İstek satırı boyutunun izin verilen 7 KB sınırını aştığını gösterir.

    Örnek hata mesajı:

    "faultstring":"request line size exceeding 7,168"

    Gerçek istek

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

    İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:

    1. İstekte iletilen URI'nin boyutunu doğrulayın.
    2. URI'nin boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğunu fark ederseniz sorunun nedeni budur.

      Örnek istek:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      Yukarıdaki örnekte, sorgu parametresinin değeri qparam 7 KB'tan büyük, yani 7.000'den fazla ASCII karakter içeriyor.

      Başka bir istemci kullanıyorsanız istemci günlüklerini inceleyebilir ve Apigee Edge'e gönderilen istek satırının boyutunu bulmaya çalışabilirsiniz.

    Mesaj işleyici günlükleri

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

    Özel Cloud kullanıcısıysanız İstek satırı boyutunun Apigee Edge'deki izin verilen sınırı aşıp aşmadığını doğrulamak için Mesaj İşleyici günlüklerini kullanabilirsiniz.

    1. Mesaj İşleyici günlüklerini kontrol edin:

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

    2. 414 belirli bir süre boyunca (sorun geçmişte yaşandıysa) hata olup olmadığını veya 414 ile hâlâ başarısız olan istekler olup olmadığını kontrol edin. Aşağıdaki arama dizelerini kullanabilirsiniz.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. system.log ile ilgili aşağıdaki gibi satırlar görürsünüz:
      2021-07-12 08:53:31,461  NIOThread@0 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() : Request:null, uri:null,
      message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{
      code = protocol.http.TooBigLine, message = request line size exceeding 7,168,
      associated contexts = []}, context:Context@366f4217
      input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443
      Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849
      age=2254670ms lastIO=0ms isOpen=true)

      Yukarıdaki hata mesajında yer alan message = request line size exceeding 7,168 metni, istek URI'sinin boyutunun 7 KB'tan fazla olduğunu gösterir. Bu nedenle, Apigee Edge com.apigee.errors.http.user.RequestURITooLong istisnasını oluşturur ve protocol.http.TooBigline hata koduyla 414 durum kodunu istemci uygulamalarına döndürür.

Çözünürlük

Boyutu düzelt

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

  1. Belirli bir istemcinin, Sınırlar bölümünde tanımlanan izin verilen sınırın üzerinde istek URI boyutu göndermesinin nedenini analiz edin.
  2. Bu durum istenmiyorsa istemci uygulamanızı, istek URI'si boyutunu izin verilen sınırdan daha küçük olacak şekilde gönderecek biçimde değiştirin.

    Yukarıda bahsedilen örnekte, uzun sorgu parametresini istek URL'sinin bir parçası olarak iletmek yerine istek gövdesinin/yükünün bir parçası olarak ileterek sorunu düzeltebilirsiniz.

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. İsteniyorsa ve izin verilen sınırdan daha fazla URI göndermek istiyorsanız sonraki seçeneklere gidin.

CwC

2. seçenek : İstek satırı sınırını artırmak için CwC özelliğini kullanma

Apigee, istek satırı boyutu sınırını artırmasına olanak tanıyan bir CwC özelliği sağlar. Ayrıntılar için İleti işlemcisinde istek satırı sınırını ayarlama başlıklı makaleyi inceleyin.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları'ndaki İstek/Yanıt Satırı Sınırı için belgelendiği gibi, boyutları izin verilen sınırı aşan İstek/Yanıt Satırları göndermemesini bekler.

  1. Herkese açık bulut kullanıcısıysanız İstek ve Yanıt Satırı boyutu için maksimum sınır, Apigee Edge Sınırları'nda İstek/Yanıt Satırı boyutu için belirtilen sınırdır.
  2. Özel bulut kullanıcısıysanız İstek ve Yanıt satırı boyutu için varsayılan maksimum 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 Request-Line boyut sınırını belirleyebilirsiniz.

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

Bu bölümde, tesisin HTTPRequest.line.limit Mesaj İşleyiciler'de yeni bir değerle güncellendiğinin nasıl doğrulanacağı açıklanmaktadır.

  1. Mesaj İşleyici makinesinde, HTTPRequest.line.limit özelliğini /opt/apigee/edge-message-processor/conf dizininde arayın ve aşağıdaki gibi hangi değerin ayarlandığını kontrol edin:
    grep -ri "HTTPRequest.line.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.line.limit=7k
  3. Yukarıdaki örnek çıktıda, HTTPRequest.line.limit özelliğinin http.properties içinde 7k değeriyle ayarlandığını unutmayın.

    Bu, Private Cloud için Apigee'de yapılandırılan Request-Line boyutu sınırının 7 KB 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ı
  • 414 hatasını yeniden oluşturmak için kullanılan curl komutunun tamamı
  • 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ı
  • 414 hatasını yeniden oluşturmak için kullanılan curl komutunun tamamı
  • 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