Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak hata kodu protocol.http.Response405WithoutAllowHeader ile 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ğıdaki hata mesajını da görebilirsiniz:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}Olası nedenler
Bu hata, arka uç sunucusu Allow başlığı olmadan 405 Method Not Allowed durum koduyla yanıt verirse oluşur.
Spesifikasyona göre
RFC 7231, bölüm 6.5.5: 405 Method Not Allowed, kaynak sunucunun
Allow başlık alanını oluşturup göndermesi GEREKİR. Bu alan, 405 yanıtında hedef kaynağın
şu anda desteklenen yöntemlerinin listesini içerir. Aksi takdirde Apigee, 502 Bad Gateway ve protocol.http.Response405WithoutAllowHeader hata koduyla yanıt verir.
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Arka uç sunucusundan "İzin ver" üstbilgisi olmadan 405 yanıtı | API isteğini işleyen arka uç sunucusu, Allow başlığı olmadan 405 durum koduyla yanıt veriyor. |
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:
- Edge kullanıcı arayüzüne uygun bir role sahip kullanıcı olarak giriş yapın.
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.
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.Response405WithoutAllowHeader
protocol.http.Response405WithoutAllowHeaderhata koduyla ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:
Daha fazla bilgi görüntülemek için Günlükleri görüntüle 'yi tıklayın ve başarısız olan isteklerden birini genişletin.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
502 - Hata Kaynağı:
target - Hata Kodu:
protocol.http.Response405WithoutAllowHeader.
- Durum Kodu:
- Hata Kaynağı
targetve Hata Koduprotocol.http.Response405WithoutAllowHeaderise bu, arka uç sunucusununAllowbaşlığı olmadan405 Method Not Alloweddurum koduyla yanıt verdiği anlamına gelir.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
-
İzleme oturumunu ve aşağıdakilerden birini etkinleştirin:
502 Bad Gatewayhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız sorunu yeniden oluşturmak için API çağrısı yapın -
502 Bad Gatewayhatası
Tüm FlowInfo'ları göster'in etkinleştirildiğinden emin olun:
- Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
- İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
Hatayı genellikle aşağıdaki örnekte gösterildiği gibi Request sent to target server (İstek hedef sunucuya gönderildi) aşamasından sonraki bir akışta bulabilirsiniz:
İzden hatanın değerini not edin.
Yukarıdaki örnek izlemede hata
Received 405 Response without Allow Headerolarak gösterilmektedir. Hata, istek arka uç sunucusuna gönderildikten sonra Apigee tarafından oluşturulduğundan arka uç sunucusununAllowbaşlığı olmadan405yanıt durum kodunu gönderdiği anlaşılır.- İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
Aşama Ayrıntıları panelinde Hata / Yanıt Başlıkları bölümüne gidin ve aşağıdaki örnekte gösterildiği gibi X-Apigee-fault-code ve X-Apigee-fault-source değerlerini belirleyin:
- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini sırasıyla
protocol.http.Response405WithoutAllowHeadervetargetolarak görürsünüz. Bu, hatanın arka uç405yanıt durum kodunuAllowüstbilgisi olmadan gönderdiği için oluştuğunu gösterir.Yanıt Başlıkları Değer X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Özel bulut kullanıcısıysanız HTTP
502hataları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~ORG.PORT#_access_log
Nerede: ORG, ORG ve PORT# gerçek değerlerle değiştirilir.
-
protocol.http.Response405WithoutAllowHeaderBelirli bir süre boyunca (sorun geçmişte yaşandıysa)502hata koduyla hata olup olmadığını veya502ile başarısız olan isteklerin olup olmadığını arayın. 502hataları bulursanız ve X-Apigee-fault-code değeriprotocol.http.Response405WithoutAllowHeaderile eşleşiyorsa X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 502 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.Response405WithoutAllowHeaderX-Apigee-fault-source target
Nedeni: Arka uç sunucusundan "Allow" başlığı olmadan 405 yanıtı
Teşhis
- Hata Kodunu ve Hata Kaynağını belirleyin.
502 Bad GatewayYaygın teşhis adımları bölümünde açıklandığı gibi API izleme, izleme aracı veya NGINX erişim günlüklerini kullanın. - Hata Kodu
protocol.http.Response405WithoutAllowHeaderise ve Hata Kaynağıtargetdeğerine sahipse bu, arka uç sunucusununAllowbaşlığı olmadan405durum koduyla yanıt verdiği anlamına gelir. Bu nedenle, Apigee502 Bad Gatewayileprotocol.http.Response405WithoutAllowHeaderhata koduyla yanıt verir.
Çözünürlük
Sorunu çözmek için aşağıdaki yöntemlerden birini kullanın:
Arka uç sunucusu
1. seçenek: İzin verme başlığıyla 405 durum kodu göndermek için arka uç sunucusunu düzeltin:
Arka uç sunucusunun her zaman RFC 7231, bölüm 6.5.5: 405 Method Not Allowed spesifikasyonuna uyduğundan emin olun ve aşağıdaki örnekte gösterildiği gibi, izin verilen yöntemlerin listesini
Allowbaşlığına ekleyerek405durum koduyla gönderin:Allow: HTTP_METHODS
- Örneğin, arka uç sunucunuz
GET,POSTveHEADyöntemlerine izin veriyorsaAllowüst bilgisinin bunları aşağıdaki gibi içerdiğinden emin olmanız gerekir:Allow: GET, POST, HEAD
Hata işleme
2. seçenek: API proxy'nizden Allow üstbilgisiyle 405 durum kodu göndermek için Hata İşleme'yi kullanın:
Arka uç sunucusu, Allow başlığı olmadan 405 durum kodunu döndürürse API proxy'nizden 405 durum kodu ve Allow başlığıyla yanıt vermek için hata yönetimi özelliğini aşağıdaki gibi kullanabilirsiniz:
Aşağıdakiler gibi bir politika oluşturun: AssignMessage politikası veya RaiseFault politikası ve durum kodunu
405olarak ayarlayın.Allowüstbilgisi ve özel bir mesaj ekleyin.İzin ver başlığıyla 405 göndermek için örnek AssignMessage politikası:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
TargetEndpointiçinde,502hatasıprotocol.http.Response405WithoutAllowHeaderhata koduyla alındığında politikayı çağıran birFaultRuleoluşturun.FaultRule'u gösteren örnek TargetEndpoint yapılandırması:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Bu değişiklikleri API proxy'nizin yeni bir düzeltmesinde kaydedin ve düzeltmeyi dağıtın.
- API çağrılarını yapın ve
405durum kodunuAllowüstbilgisiyle aldığınızı doğrulayın.
Mülkü yapılandırma
3. seçenek: Apigee Edge'in 502 hatası döndürmesini önlemek için mülkü Mesaj İşleyici'de yapılandırın
- Özel bulut kullanıcısıysanız arka uç sunucusu
Allowüstbilgisi olmadan405durum koduyla yanıt verse bile Apigee Edge'in502hatası vermesini önlemek içinHTTP.ignore.allow_header.for.405özelliğinitrueolarak güncelleyebilirsiniz. Bunun için şu Nasıl Yapılır kılavuzunu kullanın: İleti İşleyicilerde 405 özelliği için izin verilen üstbilgiyi yoksayma özelliğini yapılandırma. - Public Cloud kullanıcısıysanız lütfen Apigee Edge Destek Ekibi ile iletişime geçin.
Spesifikasyon
Apigee, arka uç sunucusundan aşağıdaki spesifikasyonlara göre Allow başlığıyla birlikte 405 Method Not Allowed yanıtı bekler:
| Spesifikasyon | |
|---|---|
| RFC 7231, bölüm 6.5.5: 405 Method Not Allowed | |
| RFC 7231, bölüm 7.4.1: İzin ver |
Dikkat edilmesi gereken önemli noktalar
Önerilen çözüm, arka uç sunucusunu 405 durum kodunu Allow üstbilgisiyle gönderecek şekilde düzeltmek ve
RFC 7231, bölüm 6.5.5: 405 Method Not Allowed spesifikasyonuna uymaktır.
Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplama başlıklı makaleyi inceleyin.
Teşhis bilgilerini toplamalıdır
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve 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ı
curlkomutunun tamamı,502 Bad Gatewayöğesiniprotocol.http.Response405WithoutAllowHeaderhata koduyla yeniden oluşturmak için kullanıldı.- 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
- API istekleri için izleme dosyası
NGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Nerede: ORG, ORG ve PORT# gerçek değerlerle değiştirilir.
- Mesaj işleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log