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 protocol.http.Response405WithoutAllowHeader hata koduna sahip 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 ortaya çıkar.

RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor spesifikasyonuna göre, kaynak sunucunun şu anda desteklenen yöntemlerin listesini içeren bir 405 yanıtında Allow üstbilgi alanı oluşturup göndermesi beklenir. Aksi takdirde Apigee, 502 Bad Gateway ve protocol.http.Response405WithoutAllowHeader hata koduyla yanıt verir.

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Arka uç sunucudan "İzin ver" başlığı olmayan 405 yanıtı API isteğini işleyen arka uç sunucusu, Allow başlığı olmadan 405 durum koduyla yanıt veriyor. 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:

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

    kuruluş açılır listesi
  3. Analiz > API İzleme > Araştır sayfasına gidin.
  4. Hataları gözlemlediğiniz belirli zaman aralığını seçin.
  5. Hata Kodu'nu Zamana göre çizin.

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

  7. protocol.http.Response405WithoutAllowHeader hata kodu ile ilgili bilgi aşağıda gösterildiği gibi gösterilmektedir:

  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 isteklerden birini genişletin.

  9. Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.Response405WithoutAllowHeader.
  10. Hata Kaynağı target ve Hata Kodu protocol.http.Response405WithoutAllowHeader ise bu durum, arka uç sunucusunun Allow başlığı olmadan 405 Method Not Allowed durum koduyla yanıt verdiğini gösterir.

İzleme aracı

Hatayı İzle aracını kullanarak teşhis etmek için:

  1. İzleme oturumunu ve
    • 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 seçeneğinin etkin olduğundan emin olun:

  3. Başarısız isteklerden birini seçip izi inceleyin.
  4. İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
  5. Hatayı genellikle İstek hedef sunucuya gönderildi aşamasından sonraki bir akışta aşağıda gösterildiği gibi bulabilirsiniz:

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

    Yukarıdaki örnek izde hata Received 405 Response without Allow Header olarak gösterilmektedir. Hata, istek arka uç sunucusuna gönderildikten sonra Apigee tarafından bildirildiğinden, arka uç sunucusunun 405 yanıt durumu kodunu Allow başlığı olmadan gönderdiğini belirtir.

  7. İzdeki AX (Analytics Data Recorded) Aşamalı Sunumu'na gidin ve bunu tıklayın.
  8. Aşama Ayrıntıları panelinde Hata / 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:

  9. X-Apigee-fault-code ve X-Apigee-fault-source değerlerini sırasıyla protocol.http.Response405WithoutAllowHeader ve targetolarak göreceksiniz. Bu, arka ucun 405 yanıt durumu kodunu Allow başlığı olmadan gönderdiği için ortaya çıktığını 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. Private Cloud kullanıcısıysanız HTTP 502 hatalarıyla ilgili önemli 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
    

    Yer: ORG, ORG ve PORT#, gerçek değerlerle değiştirilir.

  3. Belirli bir süre boyunca protocol.http.Response405WithoutAllowHeader hata koduna sahip 502 hatası (sorun geçmişte olduysa) veya 502 nedeniyle hâlâ başarısız olan bir istek olup olmadığını görmek için arama yapın.
  4. X-Apigee-fault-code ile protocol.http.Response405WithoutAllowHeader değeriyle eşleşen bir 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üğünden yukarıdaki örnek giriş, X-Apigee- hata kodu 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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

Neden: Arka uç sunucudan "İzin verme" bağlantısı olmayan 405 yanıtı

Teşhis

  1. Yaygın teşhis adımları bölümünde açıklandığı şekilde API İzleme, İzleme Aracı veya NGINX erişim günlüklerini kullanarak 502 Bad Gateway için Hata Kodu ve Hata Kaynağı'nı belirleyin.
  2. Hata Kodu protocol.http.Response405WithoutAllowHeader ise ve Hata Kaynağı target değerine sahipse bu durum, arka uç sunucusunun Allow başlığı olmadan 405 durum koduyla yanıt verdiğini gösterir. Bu nedenle Apigee, protocol.http.Response405WithoutAllowHeader hata koduyla 502 Bad Gateway ile yanıt veriyor.

Çözünürlük

Sorunu gidermek için aşağıdaki yöntemlerden birini kullanın:

Arka uç sunucusu

1. Seçenek: Arka uç sunucusunu, Allow başlığıyla 405 durum kodu gönderecek şekilde düzeltme:

  1. Arka uç sunucusunun her zaman RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor spesifikasyonuna uyduğundan ve Allow üstbilgisinin parçası olarak izin verilen yöntemlerin listesini aşağıda gösterildiği gibi ekleyerek 405 durum koduyla gönderdiğinden emin olun:

    Allow: HTTP_METHODS
    
  2. Örneğin, arka uç sunucunuz GET, POST ve HEAD yöntemlerine izin veriyorsa Allow üst bilgisinin bunları aşağıdaki şekilde içerdiğinden emin olmanız gerekir:
    Allow: GET, POST, HEAD
    

Hata giderme

2. Seçenek: API proxy'nizden "İzin Ver" başlığıyla 405 durum kodu göndermek için Hata İşleme'yi kullanın:

Arka uç sunucusu 405 durum kodunu Allow başlığı olmadan döndürürse 405 durum kodu ve API proxy'nizden Allow üstbilgisiyle aşağıdaki şekilde yanıt vermek için hata işlemeyi kullanabilirsiniz:

  1. assignMessage policy veya giderFault politikası gibi bir politika oluşturun ve durum kodunu, Allow üstbilgisi ve özel bir mesaj içeren 405 olarak ayarlayın.

    Allow üstbilgisiyle 405 göndermek için örnek Atayarak İleti 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, protocol.http.Response405WithoutAllowHeader hata kodunu içeren 502 hatasını aldıktan sonra politikayı çağıran bir FaultRule oluşturun.

    FaultRule'ı 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üzeltmesine kaydedin ve düzeltmeyi dağıtın.
  4. API çağrıları yapın ve Allow başlığıyla 405 durum kodunu aldığınızı doğrulayın.

Mülkü yapılandır

3. Seçenek: Apigee Edge'in 502 hatası döndürmesini önlemek için Mesaj İşleyici'deki özelliği yapılandırın

  1. Private Cloud kullanıcısıysanız, arka uç sunucusu "Nasıl Yapılır?" kılavuzunu kullanarak Allow başlığı olmadan 405 durum kodu ile yanıt verse bile Apigee Edge'in 502 hatası oluşturmasını önlemek için HTTP.ignore.allow_header.for.405 özelliğini true olarak güncelleyebilirsiniz: İleti İşleyicilerde 405 özelliği için "yoksaymayı yoksay" başlığını yapılandırma.
  2. Genel Bulut kullanıcısıysanız lütfen Apigee Edge Destek Ekibi ile iletişime geçin.

Spesifikasyon

Apigee, arka uç sunucudan Allow üst bilgisi ile birlikte aşağıdaki spesifikasyonlara göre 405 Method Not Allowed yanıtını bekler:

Spesifikasyon
RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor
RFC 7231, bölüm 7.4.1: Allow

Dikkat edilmesi gereken önemli noktalar

Önerilen çözüm, arka uç sunucusunun 405 durum kodunu Allow üstbilgisiyle birlikte gönderecek ve RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor spesifikasyonuna uymasıdır.

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

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki teşhis bilgilerini toplayıp 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 Bad Gateway öğesini protocol.http.Response405WithoutAllowHeader hata koduyla yeniden oluşturmak için kullanılan curl 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~ORG.PORT#_access_log
    

    Yer: ORG, ORG 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
    

Referanslar

Apigee'de hata giderme