502 Bad Gateway - Respons 405 tanpa Izinkan Header

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Gejala

Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan error kode protocol.http.Response405WithoutAllowHeader sebagai respons untuk panggilan API.

Pesan error

Aplikasi klien mendapatkan kode respons berikut:

HTTP/1.1 502 Bad Gateway

Selain itu, Anda mungkin melihat pesan error berikut:

{
   "fault":{
      "faultstring":"Received 405 Response without Allow Header",
      "detail":{
         "errorcode":"protocol.http.Response405WithoutAllowHeader"
      }
   }
}

Kemungkinan penyebab

Error ini terjadi jika server backend merespons dengan status 405 Method Not Allowed kode tanpa header Allow.

Sesuai dengan spesifikasi RFC 7231, bagian 6.5.5: 405 Metode Tidak Diizinkan, diharapkan bahwa server asal HARUS membuat dan mengirim kolom header Allow dalam respons 405 yang berisi daftar metode resource target yang saat ini didukung. Jika tidak, Apigee akan merespons dengan 502 Bad Gateway dan kode error protocol.http.Response405WithoutAllowHeader.

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Respons 405 tanpa Izinkan header dari server backend Server backend yang memproses permintaan API merespons dengan kode status 405 tanpa header Allow. Pengguna Edge Public dan Private Cloud

Langkah-langkah diagnosis umum

Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:

Pemantauan API

Untuk mendiagnosis error menggunakan Pemantauan API:

  1. Masuk ke UI Edge sebagai pengguna dengan peran yang sesuai.
  2. Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah tersebut.

    daftar drop-down org
  3. Buka Analyze > Pemantauan API > Investigasi.
  4. Pilih jangka waktu tertentu saat Anda melihat error.
  5. Gambarkan Kode Kesalahan terhadap Waktu.

  6. Pilih sel yang memiliki kode fault protocol.http.Response405WithoutAllowHeader seperti yang ditunjukkan di bawah ini:

  7. Informasi tentang kode kesalahan protocol.http.Response405WithoutAllowHeader ditampilkan seperti yang ditunjukkan di bawah ini:

  8. Klik Lihat log , lalu luaskan salah satu permintaan yang gagal untuk melihat informasi selengkapnya.

  9. Dari jendela Logs, perhatikan detail berikut:
    • Kode Status: 502
    • Sumber Kesalahan: target
    • Kode Kesalahan: protocol.http.Response405WithoutAllowHeader.
  10. Jika Sumber Kesalahan adalah target dan Kode Kesalahan adalah protocol.http.Response405WithoutAllowHeader, yang menunjukkan bahwa backend server merespons dengan kode status 405 Method Not Allowed tanpa Header Allow.

Alat rekaman aktivitas

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi rekaman aktivitas dan
    • Tunggu hingga error 502 Bad Gateway terjadi, atau
    • Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah - 502 Bad Gateway error
  2. Pastikan Tampilkan semua FlowInfos diaktifkan:

  3. Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
  4. Menavigasi melalui berbagai fase pelacakan dan menemukan tempat terjadinya kegagalan.
  5. Anda akan menemukan error ini biasanya dalam alur setelah Permintaan dikirim ke server target seperti yang ditunjukkan di bawah ini:

  6. Perhatikan nilai error dari trace.

    Contoh rekaman aktivitas di atas menunjukkan error sebagai Received 405 Response without Allow Header. Karena error dimunculkan oleh Apigee setelah permintaan dikirim ke backend server, hal ini menunjukkan bahwa server backend mengirim kode status respons 405 tanpa header Allow.

  7. Buka Fase AX (Data Analytics Direkam) di rekaman aktivitas, lalu klik Fase tersebut.
  8. Scroll ke bawah ke bagian Error / Respons Header di Detail Fase panel dan menentukan X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah ini:

  9. Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai protocol.http.Response405WithoutAllowHeader dan target, menunjukkan bahwa error ini disebabkan karena backend mengirim Kode status respons 405 tanpa header Allow.
    Header Respons Nilai
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

Untuk mendiagnosis error menggunakan log akses NGINX:

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan informasi penting tentang error 502 HTTP.
  2. Periksa log akses NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    Di mana: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.

  3. Telusuri apakah ada 502 error dengan kode error protocol.http.Response405WithoutAllowHeader selama durasi tertentu (jika terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan 502.
  4. Jika Anda menemukan error 502 dengan X-Apigee-fault-code yang cocok dengan protocol.http.Response405WithoutAllowHeader, lalu tentukan nilai parameter X-Apigee-fault-source.

    Contoh error 502 dari log akses NGINX:

    Contoh entri di atas dari log akses NGINX memiliki nilai berikut untuk X-Apigee- fault-code dan X-Apigee-fault-source:

    Header Respons Nilai
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

Penyebab: Respons 405 tanpa header Izinkan dari server backend

Diagnosis

  1. Tentukan Kode Kesalahan dan Sumber Kesalahan untuk 502 Bad Gateway menggunakan Pemantauan API, Trace Tool, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Kode Kesalahan adalah protocol.http.Response405WithoutAllowHeader dan Sumber Kesalahan memiliki nilai target, maka ini menunjukkan bahwa server backend memiliki merespons dengan kode status 405 tanpa header Allow. Oleh karena itu, Apigee merespons kembali dengan 502 Bad Gateway dengan kode error protocol.http.Response405WithoutAllowHeader.

Resolusi

Gunakan salah satu metode berikut untuk menyelesaikan masalah:

Server backend

Opsi #1: Memperbaiki Server Backend untuk mengirim kode status 405 dengan header Allow:

  1. Memastikan server backend selalu mematuhi spesifikasi RFC 7231, bagian 6.5.5: 405 Method Not Allowed dan mengirim dengan status 405 kode dengan menyertakan daftar metode yang diizinkan sebagai bagian dari header Allow sebagaimana ditunjukkan di bawah ini:

    Allow: HTTP_METHODS
    
  2. Misalnya, jika server backend Anda mengizinkan GET, POST, dan metode HEAD, Anda perlu memastikan bahwa header Allow berisi parameter tersebut sebagai berikut:
    Allow: GET, POST, HEAD
    

Penanganan fault

Opsi #2: Gunakan Penanganan Fault untuk mengirim kode status 405 dengan header Allow dari API Anda proxy:

Jika server backend menampilkan kode status 405 tanpa Allow , Anda dapat menggunakan penanganan fault untuk merespons kembali dengan kode status 405 Allow dari proxy API Anda sebagai berikut:

  1. Buat kebijakan seperti Kebijakan PrepareMessage atau kebijakan RaiseFault dan tetapkan kode status ke 405 dengan header Allow dan kustom untuk membuat pesan email baru.

    Contoh kebijakan MenetapkanMessage untuk mengirim 405 dengan header Allow:

    <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. Buat FaultRule di TargetEndpoint yang akan memanggil kebijakan setelah mendapatkan error 502 dengan kode error protocol.http.Response405WithoutAllowHeader.

    Contoh konfigurasi TargetEndpoint yang menampilkan FaultRule:

    <TargetEndpoint name="default">
    ...
        <FaultRules>
           <FaultRule name="405WithoutAllowHeader">
                <Step>
                    <Name>AM-405WithAllowHeader</Name>
                </Step>
                <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition>
            </FaultRule>
        </FaultRules>
    
  3. Simpan perubahan ini dalam revisi baru untuk proxy API Anda dan deploy revisi.
  4. Lakukan panggilan API dan verifikasi bahwa Anda mendapatkan kode status 405 dengan Header Allow.

Konfigurasi properti

Opsi #3: Konfigurasikan properti di Pemroses Pesan untuk mencegah Apigee Edge menampilkan error 502

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat memperbarui properti HTTP.ignore.allow_header.for.405 hingga true untuk mencegah Apigee Edge memunculkan error 502, meskipun server backend merespons dengan 405 kode status tanpa header Allow menggunakan panduan Cara Kerja: Mengonfigurasi header abaikan izinkan untuk properti 405 di Pemroses Pesan.
  2. Jika Anda adalah pengguna Cloud Publik, silakan hubungi Dukungan Apigee Edge

Spesifikasi

Apigee mengharapkan respons 405 Method Not Allowed dari server backend beserta dengan header Allow sesuai spesifikasi berikut:

Spesifikasi
RFC 7231, bagian 6.5.5: Metode 405 Tidak Diizinkan
RFC 7231, bagian 7.4.1: Mengizinkan

Poin penting yang perlu diperhatikan

Solusi yang direkomendasikan adalah memperbaiki server backend agar mengirim kode status 405 dengan header Allow dan mematuhi spesifikasi RFC 7231, bagian 6.5.5: Metode 405 Tidak Diizinkan.

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Harus mengumpulkan informasi diagnostik.

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, lalu hubungi Dukungan Apigee Edge.

Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:

  • Nama organisasi
  • Nama lingkungan
  • Nama Proxy API
  • Menyelesaikan perintah curl yang digunakan untuk mereproduksi 502 Bad Gateway dengan kode error protocol.http.Response405WithoutAllowHeader
  • File rekaman aktivitas untuk permintaan API

Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:

  • Pesan error lengkap yang diamati untuk permintaan yang gagal
  • Nama lingkungan
  • Paket proxy API
  • File rekaman aktivitas untuk permintaan API
  • Log akses NGINX

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    Di mana: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.

  • Log sistem Pemroses Pesan
    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Referensi

Penanganan kesalahan di Apigee