502 Bozuk Ağ Geçidi - İzin Verme Başlığı 405

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:

  1. Edge kullanıcı arayüzüne uygun bir role sahip kullanıcı olarak giriş yapın.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

    Kuruluş açılır listesi
  3. Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
  4. Hataları gözlemlediğiniz belirli zaman aralığını seçin.
  5. Hata Kodunu Zaman ile karşılaştırın.

  6. Aşağıda gösterildiği gibi, hata kodunu içeren bir hücre seçin: protocol.http.Response405WithoutAllowHeader

  7. protocol.http.Response405WithoutAllowHeader hata koduyla ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:

  8. 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.

  9. Günlükler penceresinde aşağıdaki ayrıntıları not edin:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.Response405WithoutAllowHeader.
  10. Hata Kaynağı target ve Hata Kodu protocol.http.Response405WithoutAllowHeader ise bu, arka uç sunucusunun Allow başlığı olmadan 405 Method Not Allowed durum koduyla yanıt verdiği anlamına gelir.

İzleme aracı

İzleme aracını kullanarak hatayı teşhis etmek için:

  1. İ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 sorunu yeniden oluşturmak için API çağrısı yapın - 502 Bad Gateway hatası
  2. Tüm FlowInfo'ları göster'in etkinleştirildiğinden emin olun:

  3. Başarısız olan isteklerden birini seçip izlemeyi inceleyin.
  4. İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
  5. 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:

  6. İzden hatanın değerini not edin.

    Yukarıdaki örnek izlemede hata Received 405 Response without Allow Header olarak gösterilmektedir. Hata, istek arka uç sunucusuna gönderildikten sonra Apigee tarafından oluşturulduğundan arka uç sunucusunun Allow başlığı olmadan 405 yanıt durum kodunu gönderdiği anlaşılır.

  7. İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
  8. 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:

  9. X-Apigee-fault-code ve X-Apigee-fault-source değerlerini sırasıyla protocol.http.Response405WithoutAllowHeader ve target olarak görürsünüz. Bu, hatanın arka uç 405 yanıt durum kodunu Allow ü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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:

  1. Özel bulut kullanıcısıysanız HTTP 502 hatalarıyla ilgili temel bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz.
  2. 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.

  3. protocol.http.Response405WithoutAllowHeaderBelirli bir süre boyunca (sorun geçmişte yaşandıysa) 502 hata koduyla hata olup olmadığını veya 502 ile başarısız olan isteklerin olup olmadığını arayın.
  4. 502 hataları bulursanız ve X-Apigee-fault-code değeri protocol.http.Response405WithoutAllowHeader ile 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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

Nedeni: Arka uç sunucusundan "Allow" başlığı olmadan 405 yanıtı

Teşhis

  1. Hata Kodunu ve Hata Kaynağını belirleyin. 502 Bad Gateway Yaygı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.
  2. Hata Kodu protocol.http.Response405WithoutAllowHeader ise ve Hata Kaynağı target değerine sahipse bu, arka uç sunucusunun Allow başlığı olmadan 405 durum koduyla yanıt verdiği anlamına gelir. Bu nedenle, Apigee 502 Bad Gateway ile protocol.http.Response405WithoutAllowHeader hata 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:

  1. 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 Allow başlığına ekleyerek 405 durum koduyla gönderin:

    Allow: HTTP_METHODS
  2. Örneğin, arka uç sunucunuz GET, POST ve HEAD yöntemlerine izin veriyorsa Allow ü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:

  1. Aşağıdakiler gibi bir politika oluşturun: AssignMessage politikası veya RaiseFault politikası ve durum kodunu 405 olarak 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>
  2. TargetEndpoint içinde, 502 hatası protocol.http.Response405WithoutAllowHeader hata koduyla alındığında politikayı çağıran bir FaultRule oluş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>
  3. Bu değişiklikleri API proxy'nizin yeni bir düzeltmesinde kaydedin ve düzeltmeyi dağıtın.
  4. API çağrılarını yapın ve 405 durum kodunu Allow ü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

  1. Özel bulut kullanıcısıysanız arka uç sunucusu Allow üstbilgisi olmadan 405 durum koduyla yanıt verse bile Apigee Edge'in 502 hatası vermesini önlemek için HTTP.ignore.allow_header.for.405 özelliğini true olarak 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.
  2. 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ı
  • curl komutunun tamamı, 502 Bad Gateway öğesini protocol.http.Response405WithoutAllowHeader hata 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

Referanslar

Apigee'de hata işleme