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 protocol.http.TooBigLine hata koduyla birlikte 414 Request-URI Too Long HTTP durum kodunu 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ındaki faultstring bölümünde, Apigee Edge'deki istek satırı için izin verilen sınır olan 7168 bytes (7 KB) olduğunu unutmayın.

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'de izin verilen sınırdan büyükse ortaya çıkar.

Bu hatanın olası nedenlerine bakmadan önce, istek satırının ne anlama geldiğini ve boyutunu nasıl kontrol edeceğinizi anlayalım.

İstek Satırını Anlama

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

  1. İstek Hattı
  2. ( HTTP üstbilgileri kümesi )
  3. [ Gövde ]

İ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 yapıldığında sunucuya giden ilk satır, yukarıda açıklanan İstek Satırı'nı içerir. Ardından başlıklar ve istek gövde/yük gelir.

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

İstek Satırı boyutunu anlama

  1. Yukarıda açıklanan örnekte, istekteki başlangıç satırı (ilk satır) (İstek Satırı olarak da adlandırılır) aşağıdaki gibidir:
    GET /test/ HTTP/1.1
    

    19 ASCII characters içerdiği için İstek Satırının boyutu ~19 bytes. Bu sınır, Apigee Edge'de izin verilen sınır dahilinde 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 bölümüne bakarsanız "request line size exceeding 7,168" ifadesini içerir. Bu,istemci tarafından yapılan HTTP isteğindeki İstek Satırının 7.168 baytı aştığını gösterir.

Bu hatanın olası nedenleri aşağıda açıklanmıştır:

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 yapılan HTTP isteğinin bir parçası olarak gönderilen İstek URI'sının boyutu, Apigee Edge'de izin verilen sınırdan büyüktür. 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 Kodu'nu Zamana göre çizin.
  6. Aşağıda gösterildiği gibi protocol.http.TooBigLine hata koduna ve 414 durum koduna sahip bir hücre seçin:

    ( büyük resmi göster)

  7. protocol.http.TooBigline hata koduyla ilgili bilgileri aşağıda gösterildiği gibi görürsünüz:

    ( büyük resmi göster)

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

    ( büyük resmi göster)

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

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

İzleme aracı

NGINX

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

  1. Private Cloud kullanıcısıysanız HTTP 414 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

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

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

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

    İstek Uzunluğunu Not: 7244 (7,244 KB > izin verilen sınır)

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

Teşhis

  1. API Monitoring, Trace Aracı veya NGINX Erişim günlüklerini kullanarak gözlemlenen hata için Yaygın teşhis adımları bölümünde açıklandığı şekilde Hata Kodu, Hata Kaynağı ve İstek Uzunluğu boyutunu belirleyin.
  2. Hata Kaynağı apigee veya MP değerine sahipse bu, istemci uygulaması tarafından Apigee'ye gönderilen istek boyutunun Apigee Edge'de izin verilen sınırdan daha büyük olduğu anlamına gelir.
  3. Aşağıdaki yöntemlerden birini kullanarak istek satırı boyutunun izin verilen 7 KB'lık sınırı 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 dokümanına bakın. faultstring değeri, İ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'nın boyutunu doğrulayın.
    2. URI boyutunun Apigee Edge'de izin verilen sınırın üzerinde olduğunu görürseniz sorunun nedeni budur.

      Örnek istek:

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

      Yukarıdaki örnekte, qparam sorgu parametresinin değeri 7 KB'tan büyüktür, yani 7 K ASCII karakterinden fazla içermektedir.

      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 İşleyici günlükleri

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

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

    1. Message Processor günlüklerini kontrol edin:

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

    2. Belirli bir süre boyunca 414 Hatası olup olmadığını (sorun geçmişte olduysa) veya 414 nedeniyle başarısız olan bir istek olup olmadığını görmek için arama yapın. Aşağıdaki arama dizelerini kullanabilirsiniz.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. system.log alanında aşağıdakine benzer satırlar göreceksiniz:
      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ındaki message = request line size exceeding 7,168 metni, İstek URI'si boyutunun 7 KB'tan büyük olduğunu göstermektedir. Bu nedenle Apigee Edge, com.apigee.errors.http.user.RequestURITooLong istisnasını atar ve istemci uygulamalarına hata kodu içeren 414 durum kodunu protocol.http.TooBigline döndürür.

Çözünürlük

Boyutu düzelt

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

  1. İlgili istemcinin, Sınırlar bölümünde tanımlanan şekilde izin verilen sınırdan daha fazla istek URI 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 URI'sı boyutu gönderecek şekilde değiştirin.

    Yukarıda açıklanan örnekte, uzun sorgu parametresini aşağıda gösterildiği gibi 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. İstenirse ve izin verilen sınırın üzerinde bir 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 mülkünü kullanın

Apigee, istek satırı boyutu sınırını artıran bir CwC özelliği sunar. Ayrıntılar için Mesaj İşleyici'de istek satırı sınırını ayarlama bölümüne göz atın.

Sınırlar

Apigee, istemci uygulamasının ve arka uç sunucusunun, Apigee Edge Sınırları bölümündeki İstek/Yanıt Satırı Sınırı bölümünde belirtildiği üzere, boyutları izin verilen sınırın üzerinde olan İ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ı'ndaki İstek/Yanıt Satırı boyutu bölümünde belirtildiği şekildedir.
  2. Private Cloud 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). Mevcut sınırı kontrol etme başlıklı makaledeki talimatları uygulayarak maksimum istek satırı boyutu sınırını belirleyebilirsiniz.

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

Bu bölümde, HTTPRequest.line.limit özelliğinin Mesaj İşleyicilerde 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.line.limit özelliğini arayın ve aşağıda gösterildiği gibi hangi değerin ayarlandığını kontrol edin:
    grep -ri "HTTPRequest.line.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.line.limit=7k
    
  3. Yukarıdaki örnek çıkışta, HTTPRequest.line.limit özelliğinin http.properties içindeki 7k değeriyle ayarlandığını unutmayın.

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