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.DuplicateHeader
hata koduyla birlikte 400 Bad Request
HTTP durum kodunu alır.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 400 Bad Request
Ayrıca aşağıdakine benzer bir hata mesajı da görebilirsiniz:
{ "fault":{ "faultstring":"Duplicate Header \"Expires\"", "detail":{ "errorcode":"protocol.http.DuplicateHeader" } } }
Olası nedenler
Bu hata, Apigee Edge'de yinelenmesine izin verilmeyen belirli bir HTTP üst bilgisi, istemci tarafından Apigee Edge'e gönderilen HTTP isteğinin bir parçası olarak aynı veya farklı değerlerle birden fazla kez görünüyorsa ortaya çıkar.
RFC 7230, bölüm 3.2.2: Alan Sırası'na göre, bir gönderen, bir iletide aynı alan adına sahip birden fazla üstbilgi alanı OLUŞTURMAMALIDIR.Bu alanlardan biri, söz konusu üstbilgi alanının tüm alan değerinin virgülle ayrılmış bir liste olarak tanımlanmadığı ([ör. #(values)] veya başlık alanı iyi bilinen bir istisnadır. Apigee Edge, istemci tarafından gönderilen HTTP isteğinde birden fazla kez yinelenen olmasına izin verilmeyen belirli bir başlık bulursa 400 Bad Request
ve protocol.http.DuplicateHeader
hata koduyla yanıt verir.
Bu hatanın olası nedenleri aşağıda açıklanmıştır:
Neden | Açıklama | Şunun için geçerli sorun giderme talimatları: |
---|---|---|
İstekte yinelenen başlık | İstemci uygulamasından Apigee'ye yapılan HTTP isteği, yinelenen başlıklar içeriyor. | 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:
- Apigee Edge kullanıcı arayüzünde uygun bir role sahip bir kullanıcı olarak 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.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Hata Kodu'nu Zamana göre çizin.
Aşağıda gösterildiği gibi
protocol.http.DuplicateHeader
hata koduna sahip bir hücre seçin:protocol.http.DuplicateHeader
hata kodu ile ilgili bilgi aşağıda gösterildiği gibi gösterilmektedir:- Günlükleri görüntüle'yi tıklayın ve başarısız isteğin satırını genişletin.
- Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:
- Durum Kodu:
400
- Hata Kaynağı:
apigee
- Hata Kodu:
protocol.http.DuplicateHeader
.
- Durum Kodu:
- Hata Kaynağı
apigee
veyaMP
değerine ve Hata Koduprotocol.http.DuplicateHeader
değerine sahipse bu durum, istemciden gelen HTTP isteğinin yinelenen üstbilgiler içerdiğini gösterir.
İzleme aracı
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Private Cloud kullanıcısıysanız HTTP
400
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
Yer: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir süre boyunca
400
hatası olup olmadığını (sorun geçmişte gerçekleştiyse) veya400
nedeniyle başarısız olan istekler olup olmadığını görmek için arama yapın. protocol.http.DuplicateHeader
değeriyle eşleşen X-Apigee-fault-code ile herhangi bir400
hatası bulursanız X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 400 hatası:
NGINX Erişim günlüğündeki yukarıdaki örnek giriş, X-Apigee- hata kodu ve X-Apigee-fault-source için aşağıdaki değerlere sahiptir:
Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source MP
Neden: İstekte yinelenen başlık
Teşhis
- API Monitoring veya NGINX erişim günlükleri kullanılarak gözlemlenen hata için Yaygın teşhis adımları bölümünde açıklandığı şekilde Hata Kodu ve Hata Kaynağı'nı belirleyin.
- Hata Kaynağı
apigee
veyaMP
değerine sahipse bu, istemci uygulaması tarafından Apigee'ye gönderilen isteğin yinelenen başlıklar içerdiğini gösterir. Aşağıdaki yöntemlerden birini kullanarak isteğin bir parçası olarak birden fazla kez gönderilen gerçek başlığı belirleyebilirsiniz:
Hata mesajı
Hata mesajını kullanma
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstring
dokümanına bakın.faultstring
, birden fazla kez gönderilen üst bilgi adını içerir.Örnek hata mesajı:
"faultstring":"Duplicate Header \"Expires\""
- Yukarıdaki hata mesajında,
Expires
üst bilgisininfaultstring
öğesinde olduğu gibi birden fazla kez gönderildiğini görebilirsiniz.
Gerçek istek
Asıl isteği kullanma
İstemci uygulaması tarafından yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- İstekte iletilen üstbilgilerin listesini doğrulayın.
- Belirli bir başlığın , istekte aynı veya farklı değerlerle birden fazla kez geçtiğini fark ederseniz bu hatanın nedeni budur.
Örnek İstek:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
Yukarıdaki örnek istekte,
Expires
başlığı bir kereden fazla gönderilmiştir. Bu nedenle, bu istek400 Bad Request
hatası ve şu hata koduyla başarısız olur:protocol.http.DuplicateHeader
.- Alternatif olarak, istemci günlüklerine erişiminiz varsa Apigee Edge'e yapılan gerçek istek hakkında bilginiz olup olmadığını görebilir ve birden fazla kez gönderilen başlığı belirleyebilirsiniz.
Çözünürlük
Yinelemeyi düzelt
1. Seçenek [Önerilen Seçenek] İstemci uygulamasının yinelenen başlıklar eklememesi için düzeltme
- İlgili istemcinin yinelenen üstbilgi gönderme nedenini analiz edin. Örneğin, yukarıdaki örnekte
Expires
. API proxy'lerinin, yinelenen üst bilgiyi kabul edebileceğini doğrulayın. RFC7230 HTTP spesifikasyonuna göre bu durum genellikle istenmeyen bir durumdur. - Bu istenen bir durum değilse istemci uygulamanızı yinelenen başlıklar göndermeyecek şekilde değiştirin.
Yukarıda açıklanan örnekte,
Expires
başlığının aynı değerle iki kez gönderildiği fark edilmiştir. Bu durum istenmeyen bir durumdur. Aşağıda gösterildiği gibiExpires
başlığını yalnızca bir kez ileterek sorunu düzeltebilirsiniz:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- Bunu tercih ediyorsanız ve yinelenen başlıklara izin vermek istiyorsanız 2. Seçenek'e (CwC mülkü kullanarak) gidin.
CwC
2. Seçenek: CwC mülkünü kullanma
Apigee ,istemci uygulamalarının ve hedef sunucuların Apigee Edge'deki API proxy'lerine yinelenen üstbilgiler göndermesini sağlayan bir
CwC özelliği HTTPHeader.<HeaderName>
sunar.
CwC mülkü | Değerler |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Örneğin, Mesaj İşleyicilerinde aşağıdaki özellik, Expires
başlığı için yinelenen ve birden çok değere izin verecek şekilde ayarlanabilir.
HTTPHeader.Expires=allowDuplicates, multiValued
- Private Cloud kullanıcısıysanız isteği
İleti İşleyicileri yinelenen üstbilgiler kullanacak şekilde yapılandırma "Nasıl Yapılır?" kılavuzunu kullanarak mülkü Apigee Edge'in
400 Bad Request
hatası oluşturmasını önleyecek şekilde yapılandırabilirsiniz. - Herkese Açık Bulut kullanıcısıysanız bu özelliği kuruluşunuz için yapılandırmak üzere Apigee Edge Destek Ekibi ile iletişime geçin.
Spesifikasyon
Apigee, istemci uygulamasının aşağıdaki RFC özelliklerine göre isteğin bir parçası olarak yinelenen üstbilgiler göndermemesini bekler:
Spesifikasyon |
---|
RFC 7230, bölüm 3.2.2: Alan Sırası |
RFC 7230, bölüm 3.2 Üstbilgi Alanları |
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ı
400
hatasını yeniden oluşturmak için kullanılancurl
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ı
- Ortam adı
- API proxy paketi
400
hatasını yeniden oluşturmak için kullandığınızcurl
komutunu tamamlayın- API istekleri için izleme dosyası
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