502 Gateway Buruk - ResponseWithBody

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.ResponseWithBody sebagai respons untuk panggilan API.

Pesan error

Aplikasi klien mendapatkan kode respons berikut:

HTTP/1.1 502 Bad Gateway

Selain itu, Anda mungkin melihat salah satu pesan error berikut:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

Kemungkinan penyebab

Error ini terjadi jika respons HTTP dari server backend ke Apigee Edge adalah 204 No Content atau 205 Reset Content tetapi berisi isi respons dan/atau satu atau beberapa header berikut:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

Sesuai dengan spesifikasi RFC 7231, bagian 6.3.5: 204 No Content dan RFC 7231, bagian 6.3.6: 205 Reset Content, tidak ada konten tambahan yang boleh dikirim sebagai bagian dari isi payload respons dengan kode status 204 No Content atau 205 Reset Content oleh server asal. Header respons seperti Content-Length, Content-Encoding atau Transfer-Encoding menunjukkan ukuran, jenis, atau format payload respons.

Oleh karena itu, Apigee Edge menampilkan kode status 502 Bad Gateway dengan kode error protocol.http.ResponseWithBody ke klien dalam situasi berikut:

Kode status dari server backend
Respons dari server backend berisi 204 No Content 205 Reset Content
Isi Respons ERROR ERROR

Header Content-Length

(ditetapkan ke bukan nol)

ERROR ERROR

Content-Encoding

(ditetapkan ke encoding yang didukung di Apigee Edge)

ERROR NO ERROR
Transfer-Encoding ERROR ERROR

Berikut kemungkinan penyebab error ini:

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Isi respons atau Header dengan respons 204 dari server backend Server backend mengirimkan respons 204 No Content atau 205 Reset Content dengan isi respons dan/atau satu atau beberapa header Content-Type, Content-Encoding atau Transfer-Encoding. 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 Apigee Edge sebagai pengguna dengan peran yang sesuai.
  2. Beralih ke organisasi tempat Anda ingin menyelidiki masalah.

  3. Buka halaman Analyze > API Monitoring > Investigate.
  4. Pilih jangka waktu tertentu saat Anda mengamati error.
  5. Buat diagram Fault Code terhadap Time.
  6. Pilih sel yang memiliki kode kesalahan protocol.http.ResponseWithBody seperti ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

  7. Anda akan melihat informasi tentang kode kesalahan protocol.http.ResponseWithBody seperti yang ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

  8. Klik View logs dan luaskan baris untuk permintaan yang gagal.

    ( lihat gambar yang lebih besar)

  9. Dari jendela Logs, catat detail berikut:
    • Status Code: 502
    • Fault Source: target
    • Fault Code: protocol.http.ResponseWithBody.
  10. Jika Fault Source memiliki nilai target dan Fault Code memiliki nilai protocol.http.ResponseWithBody, hal ini menunjukkan bahwa error terjadi karena server backend mengirimkan kode status 204 No Content atau 205 Reset Content dengan isi respons dan/atau salah satu header yang disebutkan di bagian Kemungkinan penyebab.

Alat pelacakan

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi pelacakan dan:
    1. Tunggu hingga error 502 Bad Gateway terjadi. atau
    2. Jika Anda dapat mereproduksi masalah, lakukan panggilan API dan reproduksi 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 terjadi.
  5. Biasanya, Anda akan menemukan error di flowinfo Error tepat setelah fase Request sent to target server seperti yang ditunjukkan di bawah:

    Skenario #1

    Skenario #1: Server Backend merespons dengan kode status 204 No Content yang berisi isi respons dan/atau salah satu header yang tercantum di Kemungkinan penyebab.

    Perhatikan nilai berikut dari pelacakan:

    • error: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    Skenario #2

    Skenario #2: Server Backend merespons dengan kode status 204 No Content yang berisi isi respons dan/atau salah satu header yang tercantum di Kemungkinan penyebab.

    Perhatikan nilai berikut dari pelacakan:

    • error: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. Buka fase AX (Data Analytics Tercatat) dalam pelacakan dan klik.
  7. Scroll ke bawah ke bagian Phase Details, Error Headers dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

  8. Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source are protocol.http.ResponseWithBody dan target. Hal ini menunjukkan bahwa error terjadi karena server backend mengirimkan kode status 204 No Content atau 205 Reset Content dengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.
    Error Nilai
    X-Apigee-fault-code protocol.http.ResponseWithBody
    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 HTTP 502 Bad Gateway.
  2. Periksa log akses NGINX:

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

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

  3. Cari untuk melihat apakah ada 502 error dengan kode error protocol.http.ResponseWithBody 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.ResponseWithBody, 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.ResponseWithBody
    X-Apigee-fault-source target
  5. Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source adalah protocol.http.ResponseWithBody dan target. Hal ini menunjukkan bahwa error terjadi karena server backend mengirimkan kode status 204 No Content atau 205 Reset Content dengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.

Penyebab: Isi respons atau Header dengan respons 204 dari server backend

Diagnosis

  1. Tentukan Fault Code dan Fault Source untuk error yang diamati menggunakan Pemantauan API, alat Trace, atau log akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum.
  2. Jika Fault Code adalah protocol.http.ResponseWithBody dan Fault Source memiliki nilai target, hal ini menunjukkan bahwa server backend telah merespons dengan kode status 204 No Content atau 205 Reset Content dengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.
  3. Untuk memvalidasi apakah server backend memang telah mengirimkan isi payload respons dan/atau satu atau beberapa header yang disebutkan di Kemungkinan penyebab, Anda dapat melakukan langkah-langkah berikut:

    1. Jika Anda adalah pengguna Public Cloud, dan jika Anda dapat membuat permintaan API yang sama ke server backend langsung dari salah satu sistem Anda.

    2. Jika Anda adalah pengguna Private Cloud, Anda dapat membuat permintaan API yang sama ke server backend langsung dari salah satu Message Processor yang terkait dengan organisasi dan lingkungan tertentu tempat kegagalan diamati.
    3. Tinjau respons yang diterima dari server backend dan pastikan respons tersebut berisi a isi payload respons dan/atau satu atau beberapa header yang disebutkan di atas. Jika ya, itulah penyebab error ini.

      Contoh #1

      Contoh #1: Respons Server Backend 204 dengan Header Content-Encoding

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      Dalam contoh ini, server backend merespons dengan 204 No Content kode status dan Content-Encoding: gzip

      Contoh #2

      Contoh #2: Respons Server Backend 204 dengan Header Content-Length

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      Dalam contoh ini, server backend merespons dengan 204 No Content kode status dan Content-Length: 48

      Contoh #3

      Contoh #3: Respons Server Backend 205 dengan Isi Respons

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      Dalam contoh ini, server backend merespons dengan 205 Reset Content kode status dengan isi respons This is a sample Response.

    4. Dalam semua contoh di atas, server backend mengirimkan 204 No Content atau 205 Reset Content kode status dengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.
    5. Oleh karena itu, Apigee Edge mengirimkan kode status 502 Bad Gateway dengan kode error protocol.http.ResponseWithBody.

Resolusi

Pastikan server backend selalu mematuhi Spesifikasi RFC 7231, bagian 6.3.6: 205 Reset Content, saat mengirimkan respons 204 No Content atau 205 Reset Content ke Apigee Edge. Artinya, server backend TIDAK BOLEH mengirimkan hal berikut sebagai bagian dari respons 204 No Content atau 205 Reset Content:

  1. Isi payload respons
  2. Dan salah satu header berikut:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

Spesifikasi

Apigee Edge merespons dengan kode status 502 Bad Gateway dan kode error protocol.http.ResponseWithBody jika server backend mengirimkan respons 204 No Content atau 205 Reset Content, tetapi tidak mematuhi spesifikasi RFC berikut:

Spesifikasi
RFC 7231, bagian 6.3.5: 204 No Content
RFC 7231, bagian 6.3.6: 205 Reset Content

Poin penting yang perlu diperhatikan

Solusi yang direkomendasikan adalah memperbaiki server backend untuk mengirimkan kode status 204 No Content dan 205 Reset Content tanpa isi respons dan header apa pun - Content-Length, Content-Encoding, dan Transfer-Encoding serta mematuhi spesifikasi RFC 7231, bagian 6.3.5: 204 No Content dan RFC 7231, bagian 6.3.6: 205 Reset Content.

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik yang diperlukan.

Mengumpulkan informasi diagnostik yang diperlukan

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 error 502
  • 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 API Proxy
  • File pelacakan untuk permintaan API
  • Log akses NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

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