Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 400 Bad Request HTTP durum kodunu ve protocol.http.DuplicateHeader hata 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ğıda gösterilene 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 başlığı, 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ürse oluşur.
RFC 7230, bölüm 3.2.2: Alan Sırasıuyarınca, bir gönderen, bir iletide aynı alan adına sahip birden fazla üst bilgi alanı oluşturmamalıdır.Ancak bu üst bilgi alanının tüm alan değeri virgülle ayrılmış bir liste olarak tanımlanmışsa [ö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 yinelenmesine izin verilmeyen belirli bir başlık bulursa 400 Bad Request ve hata kodu protocol.http.DuplicateHeader ile yanıt verir.
Bu hatanın olası nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| İstek başlığında yinelenen başlık | İstemci uygulamasından Apigee'ye gönderilen HTTP isteği, yinelenen başlıklar içeriyor. | 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.
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.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi, hata kodunu içeren bir hücre seçin
protocol.http.DuplicateHeader:
protocol.http.DuplicateHeaderhata 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.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
400 - Hata Kaynağı:
apigee - Hata Kodu:
protocol.http.DuplicateHeader.
- Durum Kodu:
- Hata Kaynağı değeri
apigeeveyaMP, Hata Kodu değeri iseprotocol.http.DuplicateHeaderise bu, 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:
- Özel bulut kullanıcısıysanız HTTP
400hataları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_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir süre boyunca (sorun geçmişte yaşandıysa)
400hataları olup olmadığını veya400ile hâlâ başarısız olan istekler olup olmadığını kontrol etmek için arama yapın. X-Apigee-fault-code'un
protocol.http.DuplicateHeaderdeğeriyle eşleşen400hataları 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ş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.DuplicateHeaderX-Apigee-fault-source MP
Nedeni: İstekte yinelenen başlık var
Teşhis
- API izleme veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu ve Hata Kaynağını belirleyin. Bu işlem, Yaygın teşhis adımları bölümünde açıklanmıştır.
- Hata Kaynağı
apigeeveyaMPdeğerine sahipse bu, istemci uygulaması tarafından Apigee'ye gönderilen isteğin yinelenen üstbilgiler içerdiğini gösterir. İsteğin bir parçası olarak birden fazla kez gönderilen gerçek başlığı aşağıdaki yöntemlerden birini kullanarak belirleyebilirsiniz:
Hata mesajı
Hata mesajını kullanma
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstringbölümüne bakın.faultstring, birden fazla kez gönderilen üstbilgi adını içeriyor.Örnek hata mesajı:
"faultstring":"Duplicate Header \"Expires\""
- Yukarıdaki hata mesajında,
Expiresüstbilgisininfaultstringiçinde görüldüğü gibi birden fazla kez gönderildiği görülmektedir.
Gerçek istek
Gerçek 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 başlıkların listesini doğrulayın.
- Belirli bir başlığın , aynı değerle veya farklı değerlerle birlikte istekte birden fazla kez göründüğünü tespit 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
Expiresbaşlığı birden fazla kez gönderiliyor. Bu nedenle, bu istek400 Bad Requesthatası veprotocol.http.DuplicateHeaderhata koduyla başarısız olur.- Alternatif olarak, istemci günlüklerine erişiminiz varsa Apigee Edge'e yapılan gerçek istek hakkında bilgi olup olmadığını görebilir ve birden fazla kez gönderilen başlığı belirleyebilirsiniz.
Çözünürlük
Kopyalama sorununu düzeltme
1. seçenek [Önerilen seçenek]: İstemci uygulamasını, yinelenen başlıkları içermeyecek şekilde düzeltin
- Belirli bir istemcinin neden yinelenen üstbilgi gönderdiğini analiz edin. Örneğin, yukarıdaki durumda
Expires. API proxy'lerinin yinelenen üst bilgiyi kabul etmesinin sorun olmadığını doğrulayın. Genellikle HTTP spesifikasyonu RFC7230 uyarınca istenmez. - Bu durum istenmiyorsa istemci uygulamanızı, yinelenen başlıklar göndermeyecek şekilde değiştirin.
Yukarıda bahsedilen örnekte,
Expiresbaşlığının aynı değerle iki kez gönderildiği görülmektedir. Bu durum istenmeyen bir durumdur. Bu sorunu, aşağıdaki örnekte gösterildiği gibiExpiresüstbilgisini yalnızca bir kez ileterek düzeltebilirsiniz:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- İsteniyorsa ve yinelenen üstbilgilere izin vermek istiyorsanız 2. seçenek: CwC mülkünü kullanma bölümüne 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 başlıklar göndermesine olanak tanıyan bir
CwC özelliği HTTPHeader.<HeaderName> sunar.
| CwC mülkü | Değerler |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Örneğin, aşağıdaki özellik, ileti işlemcilerinde ayarlanarak Expires başlığı için yinelenenlere ve birden fazla değere izin verilebilir.
HTTPHeader.Expires=allowDuplicates, multiValued
- Özel bulut kullanıcısıysanız, istekte yinelenen üstbilgiler olsa bile
400 Bad Requesthatası oluşturmasını engellemek için mülkü yapılandırabilirsiniz. Bu işlem için Configuring Message Processors to use duplicate headers (Yinelenen üstbilgileri kullanmak üzere mesaj işlemcilerini yapılandırma) başlıklı nasıl yapılır kılavuzundan yararlanabilirsiniz. - 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 spesifikasyonlarına göre isteğin bir parçası olarak yinelenen başlıklar göndermemesini bekler:
| Spesifikasyon |
|---|
| RFC 7230, bölüm 3.2.2: Alan Sırası |
| RFC 7230, bölüm 3.2 Üst Bilgi Alanları |
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ı
400hatasını yeniden oluşturmak için kullanılancurlkomutunun 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ı
- Ortam adı
- API proxy paketi
400hatasını yeniden oluşturmak için kullandığınızcurlkomutunu 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_logNerede: ORG, ENV ve PORT# değerlerinin yerine gerçek değerler girilir.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log