502 Bad Gateway - Respons 405 tanpa Izinkan Header

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

Gejala

Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan kode error 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 405 Method Not Allowed status kode tanpa header Allow.

Sesuai dengan spesifikasi RFC 7231, bagian 6.5.5: 405 Method Not Allowed, server asal DIHARAPKAN membuat dan mengirim kolom header Allow dalam respons 405 yang berisi daftar metode yang saat ini didukung oleh resource target. Jika tidak, Apigee akan merespons dengan 502 Bad Gateway dan kode error protocol.http.Response405WithoutAllowHeader.

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Respons 405 tanpa header Allow 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. Login ke UI Edge sebagai pengguna dengan peran yang sesuai.
  2. Beralih ke organisasi tempat Anda ingin menyelidiki masalah ini.

    daftar drop-down org
  3. Buka halaman Analyze > API Monitoring > Investigate.
  4. Pilih jangka waktu tertentu saat Anda mengamati error.
  5. Buat grafik Fault Code terhadap Time.

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

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

  8. Klik View logs dan luaskan salah satu permintaan yang gagal untuk melihat informasi selengkapnya.

  9. Dari jendela Logs, catat detail berikut:
    • Status Code: 502
    • Fault Source: target
    • Fault Code: protocol.http.Response405WithoutAllowHeader.
  10. Jika Fault Source adalah target dan Fault Code adalah protocol.http.Response405WithoutAllowHeader, hal ini menunjukkan bahwa server backend merespons dengan kode status 405 Method Not Allowed tanpa header Allow.

Alat pelacak

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi pelacakan 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 Show all FlowInfos diaktifkan:

  3. Pilih salah satu permintaan yang gagal dan periksa pelacakannya.
  4. Buka berbagai fase pelacakan dan temukan tempat terjadinya kegagalan.
  5. Anda biasanya akan menemukan error dalam alur setelah fase Request sent to target server seperti yang ditunjukkan di bawah:

  6. Catat nilai error dari pelacakan.

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

  7. Buka Fase AX (Data Analisis Direkam) dalam pelacakan dan klik.
  8. Scroll ke bawah ke bagian Error / Response Headers di panel Phase Details dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah:

  9. Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai protocol.http.Response405WithoutAllowHeader dan targetmasing-masing, yang 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 utama tentang error HTTP 502.
  2. Periksa log akses NGINX:

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

    Dengan: ORG, ORG dan, PORT# diganti dengan nilai sebenarnya.

  3. Cari untuk melihat apakah ada 502 error dengan kode error protocol.http.Response405WithoutAllowHeader selama durasi tertentu (jika masalah 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 nilai protocol.http.Response405WithoutAllowHeader, tentukan nilai X-Apigee-fault-source.

    Contoh error 502 dari log akses NGINX:

    Entri contoh 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 Allow dari server backend

Diagnosis

  1. Tentukan Fault Code dan Fault Source untuk 502 Bad Gateway menggunakan Pemantauan API, Alat Pelacak, atau log akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum.
  2. Jika Fault Code adalah protocol.http.Response405WithoutAllowHeader dan Fault Source memiliki nilai target, hal ini menunjukkan bahwa server backend telah 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 mengatasi masalah ini:

Server backend

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

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

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

Penanganan gangguan

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

Jika server backend menampilkan kode status 405 tanpa header Allow, Anda dapat menggunakan penanganan gangguan untuk merespons kembali dengan kode status 405 dan header Allow dari Proxy API Anda sebagai berikut:

  1. Buat kebijakan seperti kebijakan AssignMessage atau kebijakan RaiseFault dan tetapkan kode status ke 405 dengan header Allow dan pesan kustom.

    Contoh kebijakan AssignMessage 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 memanggil kebijakan saat 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 proxy API Anda dan deploy revisi tersebut.
  4. Lakukan panggilan API dan verifikasi bahwa Anda mendapatkan kode status 405 dengan header Allow.

Mengonfigurasi properti

Opsi #3: Mengonfigurasi properti di Message Processor untuk mencegah Apigee Edge menampilkan error 502

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat memperbarui properti HTTP.ignore.allow_header.for.405 ke true untuk mencegah Apigee Edge memunculkan error 502, meskipun server backend merespons dengan kode status 405 tanpa header Allow menggunakan Panduan cara: Mengonfigurasi properti ignore allow header for 405 di Message Processor.
  2. Jika Anda adalah pengguna Public Cloud, hubungi Dukungan Apigee Edge

Spesifikasi

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

Spesifikasi
RFC 7231, bagian 6.5.5: 405 Method Not Allowed
RFC 7231, bagian 7.4.1: Allow

Poin penting yang perlu diperhatikan

Solusi yang direkomendasikan adalah memperbaiki server backend untuk mengirim kode status 405 dengan header Allow dan mematuhi spesifikasi RFC 7231, bagian 6.5.5: 405 Method Not Allowed.

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Informasi diagnostik yang harus dikumpulkan.

Informasi diagnostik yang harus dikumpulkan

Jika masalah berlanjut meskipun setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge.

Jika Anda adalah pengguna Public Cloud, berikan informasi berikut:

  • Nama organisasi
  • Nama lingkungan
  • Nama API Proxy
  • Perintah curl lengkap yang digunakan untuk mereproduksi 502 Bad Gateway dengan kode error protocol.http.Response405WithoutAllowHeader
  • File pelacakan 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 pelacakan untuk permintaan API
  • Log akses NGINX

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

    Dengan: ORG, ORG dan, PORT# diganti dengan nilai sebenarnya.

  • Log sistem Message Processor
    /opt/apigee/var/log/edge-message-processor/logs/system.log

Referensi

Penanganan fault di Apigee