Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
İstemci uygulaması 400 Bad Request
HTTP durum kodunu hata koduyla alıyor
protocol.http.DuplicateHeader
API çağrılarına yanıt olarak kullanılı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'de kopyası olmasına izin verilmeyen belirli bir HTTP üstbilgisinde ortaya çıkar. Edge, tarafından gönderilen HTTP isteğinin parçası olarak aynı veya farklı değerlerle birden fazla kez görünür istemciyi Apigee Edge'e bağlayabilirsiniz.
uyarınca
RFC 7230, bölüm 3.2.2: Alan Sırası, bir gönderen birden çok üstbilgi OLUŞTURMAMALIDIR
bir iletide aynı alan adına sahip alanları oluşturmadığı sürece,
üstbilgi alanı virgülle ayrılmış bir liste olarak tanımlanır, [ör. #(values)] ya da başlık alanı bir
iyi bilinen bir istisnadır. Apigee Edge belirli bir başlık bulursa ona
yinelemeleri, istemci tarafından gönderilen HTTP isteğinde birden fazla kez içeriyorsa,
400 Bad Request
ve hata koduyla yanıt verir
protocol.http.DuplicateHeader
.
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 gönderilen HTTP isteğinde yinelenen başlıklar var. | Edge Herkese Açık ve Private Cloud kullanıcıları |
Sık kullanılan 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 olmalıdır.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analiz > API İzleme > İnceleme sayfası.
- Hataları gözlemlediğiniz zaman aralığını seçin.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Zaman ile Hata Kodu'nun grafiğini çizin.
protocol.http.DuplicateHeader
hata koduna sahip bir hücre seçin aşağıdaki gibidir:
.protocol.http.DuplicateHeader
hata koduyla ilgili bilgi: 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 isteğin bulunduğu satırı genişletin.
- Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
- Durum Kodu:
400
- Hata Kaynağı:
apigee
- Hata Kodu:
protocol.http.DuplicateHeader
.
- Durum Kodu:
- Hata Kaynağı
apigee
veyaMP
değerine ve Hata Kodu değerine sahipseprotocol.http.DuplicateHeader
değerine ayarlanırsa bu, istemci yinelenen başlıklar içeriyordur.
İzleme aracı
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Private Cloud kullanıcısıysanız aşağıdakileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz:
HTTP
400
hatalarıyla ilgili önemli bilgiler. 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# şununla değiştirilir: gerçek değerler.
- Belirli bir sürede herhangi bir
400
hatası olup olmadığını görmek için arama yapın ( olup olmadığını kontrol edin) veya hâlâ başarısız olan bir istek varsa400
X-Apigee-fault-code ile herhangi bir
400
hatası bulursanızprotocol.http.DuplicateHeader
değeriyle aynı olduğunda, X-Apigee-fault-source.'un değerini belirleyin.NGINX erişim günlüğünden örnek 400 hatası:
NGINX Erişim günlüğünden alınan yukarıdaki örnek giriş, X-Apigee- hata kodu ve X-Apigee-fault-source:
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 kullanılarak gözlemlenen hatanın Hata Kodu ve Hata Kaynağı'nı belirleme Yaygın teşhis adımlarında açıklandığı şekilde izleme veya NGINX erişim günlükleri.
- Hata Kaynağı
apigee
veyaMP
değerine sahipse bu İstemci uygulaması tarafından Apigee'ye gönderilen isteğin yinelenen bir istek içerdiğini gösterir başlıklar. İsteğin bir parçası olarak birden çok kez gönderilen asıl başlığı belirlemek için aşağıdaki yöntemlerden birini kullanabilirsiniz:
Hata mesajı
Hata mesajını kullanma
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstring
inceleyin.faultstring
, birden fazla kez gönderilmiş olan üstbilgi adını içerir.Örnek hata mesajı:
"faultstring":"Duplicate Header \"Expires\""
- Yukarıdaki hata iletisinde
Expires
üstbilgisininfaultstring
adresinde görüldüğü gibi birden fazla kez gönderildi.
Gerçek istek
Asıl isteği kullanma
İstemci uygulamanın yaptığı asıl isteğe erişiminiz varsa şu adımları uygulayın:
- İstekte iletilen üstbilgilerin listesini doğrulayın.
- Belirli bir başlığın aynı zamanda birden fazla kez aynı değere sahip veya farklı değerlerle istekliyse bunun nedeni budur. bu hata için.
Ö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ığı, şu değerden daha fazla gönderildi: bir kez. Bu nedenle bu istek400 Bad Request
hatasıyla başarısız olur ve hata kodu:protocol.http.DuplicateHeader
.- Alternatif olarak, istemci günlüklerine erişiminiz varsa, veya Apigee Edge'e gönderilen gerçek istek hakkında bilgi verir birden fazla kez gönderilir.
Çözünürlük
Kopyayı düzeltin
1. Seçenek [Önerilen Seçenek] İstemci uygulamasını yinelenen başlıklar içermeyecek şekilde düzeltin
- İlgili istemcinin yinelenen üstbilgi gönderme nedenini analiz edin. Örneğin,
Yukarıdaki örnekte
Expires
. API proxy'lerinin kabul edebileceğini doğrulayın tekrarlandığından emin olun. Genellikle, HTTP spesifikasyonuna göre bu istenmemektedir RFC7230. - İstenmiyorsa istemci uygulamanızı yinelenen başlıklar göndermeyecek şekilde değiştirin.
Yukarıda açıklanan örnekte
Expires
başlığının gönderildiği fark edilmiştir. 2 katına çıkar. Bu da istenen bir durumdur. Sorunu,Expires
başlığı, aşağıda gösterildiği gibi yalnızca bir kez gösterilir:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- İsterseniz ve yinelenen başlıklara izin vermek istiyorsanız 2. Seçenek: CwC özelliğini kullanma.
CwC
2. seçenek CwC özelliğini kullanma
Apigee,
CwC mülkü olan HTTPHeader.<HeaderName>
uygulamaların ve hedef sunucuların Apigee Edge'deki API proxy'lerine yinelenen üstbilgiler göndermesine izin verir.
CwC mülkü | Değerler |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Örneğin, aşağıdaki özellik Mesaj İşleyicileri üzerinde yinelenenlere ve
Expires
başlığı için birden fazla değer.
HTTPHeader.Expires=allowDuplicates, multiValued
- Private Cloud kullanıcısıysanız mülkü yapılandırarak
Apigee Edge'in
400 Bad Request
hatası vermesini (istekte bulunsa bile) yinelenen üstbilgiler içeriyorsa İleti işlemcilerini yinelenen üstbilgileri kullanacak şekilde yapılandırma "nasıl yapılır?" kılavuzu. - Herkese Açık Bulut kullanıcısıysanız bu özelliği yapılandırmak için Apigee Edge Destek Ekibi ile iletişime geçin kuruluşunuz için hazırlar.
Spesifikasyon
Apigee, istemci uygulamasının istek kapsamında yinelenen başlıklar göndermemesini bekler aşağıdaki RFC spesifikasyonlarına göre:
Spesifikasyon |
---|
RFC 7230, bölüm 3.2.2: Alan Sırası |
RFC 7230, bölüm 3.2 Üstbilgi Alanları |
Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız şu sayfaya gidin: Teşhis bilgileri toplanmalıdır.
Teşhis bilgileri toplanmalıdır
Aşağıdaki teşhis bilgilerini toplayın, ardından Apigee Edge Destek Ekibi ile iletişime geçin.
Herkese açık Cloud 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 tam hata mesajı gözlemlendi
- 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# şununla değiştirilir: gerçek değerler.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log
.