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 502 Bad Gateway
HTTP durum kodunu alır.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 502 Bad Gateway
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, arka uç sunucusu tarafından Apigee Edge'e gönderilen HTTP yanıtının 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, yinelenen olmasına izin verilmeyen belirli bir üst bilginin hedef/arka uç sunucusu tarafından gönderilen HTTP yanıtında birden fazla kez gönderildiğini tespit ederse 502 Bad Gateway
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ı: |
---|---|---|
Yanıtta yinelenen başlık | Arka uç sunucusundan alınan yanıtta yinelenen başlıklar var. | 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:
- Uygun role sahip bir kullanıcı olarak Apigee Edge kullanıcı arayüzünde 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ğıdaki gibi gösterilmektedir:- Durum Kodu'nun yukarıdaki örnekte gösterildiği gibi
502
olduğundan emin olun. - 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ı not edin:
- Durum Kodu:
502
- Hata Kaynağı:
target
- Hata Kodu:
protocol.http.DuplicateHeader
.
- Durum Kodu:
- Hata Kaynağı
target
olup arka uç sunucusundan gelen yanıtın yinelenen üstbilgiler içerdiğini gösterir.
İzleme aracı
Hatayı İzle aracını kullanarak teşhis etmek için:
- İzleme oturumunu ve aşağıdakilerden birini etkinleştirin:
502 Bad Gateway
hatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısı yapın ve
502 Bad Gateway
hatasını yeniden oluşturun
Tüm Akış Bilgilerini Göster'in etkin olduğundan emin olun:
- Başarısız isteklerden birini seçip izi inceleyin.
- İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
Hatayı genellikle aşağıda gösterildiği gibi İstek hedef sunucuya gönderildi aşamasından sonraki bir akışta bulabilirsiniz:
İzdeki hatanın değerini not edin.
Yukarıdaki örnek izde hata
Duplicate Header "Expires"
olarak gösterilmektedir. Hata, istek arka uç sunucusuna gönderildikten sonra Apigee tarafından bildirildiğinden, arka uç sunucusununExpires
üst bilgisini birden fazla kez gönderdiğini belirtir.- İzdeki AX (Analytics Verileri Kaydedilen) Aşaması'na gidin ve onu tıklayın.
Aşama Ayrıntıları - Yanıt Başlıkları bölümüne ilerleyin ve X-Apigee-fault-code ile X-Apigee-fault-source değerlerini aşağıda gösterildiği gibi belirleyin:
- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini
protocol.http.DuplicateHeader
vetarget
olarak görürsünüz. Bu durum, bu hatanın arka uç sunucu tarafındanExpires
yanıt başlığı için yinelenen üst bilgiler geçirilmesinden kaynaklandığını gösterir.Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
Proxy zincirleme kullanıp kullanmadığınızı, yani hedef sunucunun veya hedef uç noktanın Apigee'de başka bir proxy çağırıp çağırmadığını kontrol edin.
Bunu belirlemek için İstek hedefe gönderildi sunucusu aşamasına geri dönün. Show Curl (Curl'yi Göster) seçeneğini tıklayın.
Hedef sunucu ana makine takma adını belirleyebileceğiniz Curl for Request to Target Server (Hedef Sunucuya Gönderilen İstek İçin Curl) penceresi açılır.
- Hedef sunucu ana makine takma adı bir sanal ana makine takma adına işaret ediyorsa bu, proxy zincirlemedir. Bu durumda,
502 Bad Gateway
hatasının aslında neyin neden olduğunu belirleyene kadar zincirleme proxy için yukarıdaki adımların tümünü tekrarlamanız gerekir. - Hedef sunucu ana makine takma adı, arka uç sunucunuzu işaret ediyorsa arka uç sunucunuzun Apigee'ye yanıt olarak yinelenen üst bilgiler gönderdiğini gösterir.
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Private Cloud kullanıcısıysanız HTTP
502
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
502
hatası olup olmadığını (sorun geçmişte olduysa) veya502
nedeniyle başarısız olan isteklerin olup olmadığını görmek için arama yapın. X-Apigee-fault-code değeriyle eşleşen X-Apigee-fault-code özelliğinde
502
hatası bulursanız X-Apigee-fault-code değerinin değerini belirleyin.NGINX erişim günlüğünden örnek 502 hatası:
NGINX Erişim günlüğündeki yukarıdaki örnek giriş, X- Apigee-fault-code 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 target
Neden: Yanıtta 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ğı'nda
target
değeri varsa bu, hedef sunucu tarafından gönderilen yanıtın yinelenen başlıklar içerdiğini gösterir. Aşağıdaki yöntemlerden birini kullanarak yanıtın 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 kullanarak:
- Hedef sunucuya yapılan asıl isteğe erişiminiz yoksa İzleme aracını kullanma adımı 10.a ve 10.b adımlarından ilgili
curl
komutunu alın. Hedef sunucu uygulamasına yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
Hedef sunucuyu arayın.
Bu örnekte kullanılan hedef sunucu için örnek İstek:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
Yanıtta görünen üstbilgilerin listesini doğrulayın.
Bu örnekte kullanılan hedef sunucudan Örnek Yanıt:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
Yukarıdaki örnek istekte,
Expires
başlığı bir kereden fazla gönderilmiştir. Bu nedenle, bu istek502 Bad Gateway
hatası ve şu hata koduyla başarısız olur:protocol.http.DuplicateHeader
.faultstring
içinde adı görünen üst bilgi, arka uç sunucusunun yanıtında birden fazla kez görünüyorsa bu hatanın nedeni budur. Yukarıdaki örnekte,Expires
başlığı bir kereden fazla gönderilir.
Çözünürlük
Yinelemeyi düzelt
1. Seçenek [Önerilen Seçenek] Arka uç sunucuyu, yinelenen başlıklar eklemeyecek şekilde düzeltin
- İlgili arka uç sunucusunun, yinelenen
Expires
üst bilgisi gönderme nedenini analiz edin ve API proxy'lerinin bunu kabul etmesinin uygun olup olmadığını doğrulayın. Çoğu durumda, RFC7230 HTTP spesifikasyonuna göre bu istenmeyen bir durum değildir. - İstenirse, hedef sunucu 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. Hedef sunucununExpires
üst bilgisini yalnızca bir kez ilettiğinden emin olarak sorunu düzeltebilirsiniz. - 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
üstbilgisi için yinelenenlere ve birden çok değere izin verecek şekilde ayarlanabilir.
HTTPHeader.Expires=allowDuplicates, multiValued
- Private Cloud kullanıcısıysanız mülkü,
İleti İşleyicileri yinelenen üstbilgiler kullanacak şekilde yapılandırma "Nasıl Yapılır?" kılavuzunda, yinelenen üstbilgiler içerse bile Apigee Edge'in
502 Bad Gateway
hatası vermesini ö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, arka uç sunucusunun aşağıdaki RFC özelliklerine göre davranmasını beklediği için 502 Bad Gateway
hata yanıtıyla yanıt verir:
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 toplamalısınız başlıklı makaleyi 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ı
502
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
- 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