415 Jenis Media Tidak Didukung - Encoding Tidak Didukung

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

Gejala

Aplikasi klien mendapatkan kode status HTTP 415 Unsupported Media Type dengan kode error protocol.http.UnsupportedEncoding sebagai respons terhadap panggilan API.

Pesan error

Aplikasi klien mendapatkan kode respons berikut:

HTTP/1.1 415 Unsupported Media Type

Selain itu, Anda mungkin melihat pesan error yang mirip dengan yang ditampilkan di bawah ini:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

Kemungkinan penyebab

Error ini terjadi jika nilai header Content-Encoding yang ditentukan dalam permintaan HTTP yang dikirim oleh klien ke Apigee atau respons HTTP yang dikirim oleh server backend untuk Apigee tidak berisi encoding didukung oleh Apigee, sesuai spesifikasi RFC 7231, bagian 6.5.13: 415 Jenis Media yang Tidak Didukung.

Kemungkinan penyebab error ini adalah sebagai berikut:

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Encoding yang tidak didukung digunakan dalam permintaan Header permintaan Content-Encoding berisi encoding yang tidak didukung oleh Apigee Edge. Pengguna Edge Public dan Private Cloud
Encoding yang tidak didukung digunakan sebagai respons Header respons server backend Content-Encoding berisi encoding yang tidak didukung oleh Apigee Edge. Pengguna Edge Public dan Private Cloud

Langkah-langkah diagnosis umum

Untuk mendiagnosis error, Anda dapat menggunakan salah satu metode berikut:

Pemantauan API

Untuk mendiagnosis error menggunakan Pemantauan API:

  1. Login ke akun Apigee Edge.
  2. Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah ini:

    drop-down org ui
  3. Buka Analyze > Pemantauan API > Investigasi.
  4. Pilih jangka waktu tertentu saat Anda melihat error.
  5. Pastikan filter Proxy disetel ke Semua.
  6. Gambarkan Kode Kesalahan terhadap Waktu.
  7. Pilih sel yang memiliki kode kesalahan protocol.http.UnsupportedEncoding seperti yang ditunjukkan di bawah:

    sel kode fault dipilih
  8. Informasi tentang kode kesalahan protocol.http.UnsupportedEncoding ditampilkan seperti yang ditunjukkan di bawah:

  9. Klik Lihat log dan luaskan salah satu permintaan yang gagal dengan 415 untuk melihat informasi selengkapnya:

  10. Dari jendela Logs, perhatikan detail berikut:
    • Sumber Kesalahan: Informasi ini menunjukkan bahwa error ditampilkan oleh apigee atau target.
    • Kode Kesalahan: Ini seharusnya cocok dengan protocol.http.UnsupportedEncoding.
  11. Jika Sumber Kesalahan adalah apigee, hal tersebut menunjukkan bahwa permintaan berisi encoding yang tidak didukung di header Content-Encoding.
  12. Jika Sumber Kesalahan adalah target, maka hal itu menunjukkan bahwa server backend respons berisi encoding yang tidak didukung di header Content-Encoding.

Alat rekaman aktivitas

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi rekaman aktivitas dan:
    • Tunggu hingga error 415 Unsupported Media Type terjadi, atau
    • Jika Anda dapat merekonstruksi masalah, lakukan panggilan API untuk mereproduksi 415 Unsupported Media Type error.
  2. Pastikan Tampilkan semua FlowInfos diaktifkan:

    panel opsi tampilan, menampilkan semua flowinfos
  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 yang biasanya ada dalam alur setelah Permintaan dikirim ke target server seperti yang ditunjukkan di bawah ini:

  6. Perhatikan nilai error dari trace.

    Contoh rekaman aktivitas di atas menunjukkan error sebagai Unsupported Encoding "utf-8". Sejak error yang dimunculkan oleh Apigee setelah permintaan dikirim ke server backend, hal ini menunjukkan server backend mengirim header respons Content-Encoding dengan nilai dari "utf-8", yang bukan encoding yang didukung di Apigee.

  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 nilai 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.UnsupportedEncoding dan target, yang menunjukkan bahwa error disebabkan karena nilai encoding "utf-8" yang tidak didukung diteruskan oleh server backend di header respons Content-Encoding.

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

  10. Periksa apakah Anda menggunakan perantaian proxy; yaitu, jika server target/endpoint target memanggil di Apigee.
    1. Untuk menentukannya, kembali ke fase Permintaan dikirim ke server target. Klik Show Curl.

    2. Jendela Curl for Request Sent to Target Server akan terbuka dan Anda dapat menentukan alias {i>host<i} server target.
    3. Jika alias host server target mengarah ke alias host virtual, berarti itu adalah proxy perantaian. Dalam hal ini, Anda perlu mengulangi semua langkah di atas untuk proxy berantai hingga Anda dapat menentukan penyebab error 415 Unsupported Media Type.
    4. Jika alias {i>host server<i} target mengarah ke server {i>backend<i} Anda, maka hal itu menunjukkan bahwa server backend Anda meneruskan encoding yang tidak didukung ke Apigee.

Log akses Nginix

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 415 HTTP.
  2. Periksa log akses NGINX:

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

  3. Menelusuri Error 415 selama durasi tertentu (jika masalah terjadi sebelumnya) atau jika ada permintaan yang masih gagal dengan 415.
  4. Jika Anda menemukan error 415 dengan pencocokan X-Apigee-fault-code nilai protocol.http.UnsupportedEncoding, lalu tentukan nilainya dari X-Apigee-fault-source.

    Contoh error 415 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 MP

    X-Apigee-fault-source juga dapat memiliki nilai target.

Penyebab: Encoding tidak didukung dalam permintaan

Diagnosis

  1. Tentukan Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan API Log akses pemantauan atau NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Kode Kesalahan adalah protocol.http.UnsupportedEncoding dan Kesalahan Sumber memiliki nilai apigee atau MP, ini menunjukkan bahwa permintaan yang dikirim oleh aplikasi klien berisi encoding yang tidak didukung dalam header permintaan Content-Encoding.
  3. Anda dapat menentukan nilai encoding yang tidak didukung yang diteruskan sebagai bagian dari permintaan HTTP menggunakan salah satu metode berikut:

    Pesan error

    Menggunakan pesan error:
    1. Jika Anda memiliki akses ke pesan error lengkap yang diterima dari Apigee Edge, rujuk ke faultstring. faultstring berisi nilai yang tidak didukung endcoding.

      Contoh Pesan Error:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. Dalam pesan error di atas, perhatikan bahwa nilai encoding yang tidak didukung adalah “UTF-8” seperti yang terlihat dalam faultstring.

      Karena “UTF-8” bukan encoding yang didukung di Apigee Edge, permintaan ini gagal dengan error 415 Unsupported Media Type dengan kode error: protocol.http.UnsupportedEncoding.

    Permintaan sebenarnya

    Menggunakan permintaan yang sebenarnya:
    1. Jika Anda tidak memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, buka Resolusi.
    2. Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, lakukan langkah-langkah berikut:
      1. Tentukan nilai yang diteruskan ke header permintaan Content-Encoding.
      2. Jika nilai yang diteruskan ke header permintaan Content-Encoding bukan salah satu dari nilai yang tercantum dalam Encoding yang didukung, berarti penyebab kesalahan ini.

        Contoh permintaan:

        curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz

        Contoh permintaan di atas mengirimkan nilai "UTF-8" ke header Content- Encoding, yang bukan Encoding yang Didukung di Apigee Edge. Oleh karena itu, permintaan ini gagal dengan error 415 Unsupported Media Type yang disertai kode error: protocol.http.UnsupportedEncoding.

Resolusi

  1. Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung.
  2. Pastikan aplikasi klien selalu mengirimkan hal berikut:
    • Hanya encoding yang didukung sebagai nilai pada header Content-Encoding di permintaan
    • Payload permintaan dalam format yang didukung ke Apigee Edge dan cocok dengan format ditentukan di header Content-Encoding
  3. Pada contoh di atas, payload permintaan memiliki ekstensi gz yang menunjukkan bahwa kontennya harus gzip. Anda dapat memperbaiki masalah ini dengan mengirimkan header permintaan sebagai Content-Encoding: gzip dan payload permintaan dalam format gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

Penyebab: Respons encoding tidak didukung

Diagnosis

  1. Tentukan Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan API Log akses Monitoring, Trace Tool, atau NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Fault Source memiliki nilai target, ini menunjukkan bahwa Respons yang dikirim oleh server backend berisi encoding yang tidak didukung dalam Header Content-Encoding.
  3. Anda dapat menentukan nilai encoding yang tidak didukung yang diteruskan sebagai bagian dari respons HTTP dari server backend menggunakan salah satu metode berikut:

    Pesan error

    Menggunakan pesan error:
    1. Jika Anda memiliki akses ke pesan error lengkap yang diterima dari Apigee Edge, lihat faultstring. faultstring berisi nilai encoding tidak didukung.

      Contoh pesan error:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. Dalam pesan error di atas, perhatikan bahwa nilai encoding yang tidak didukung adalah “UTF-8” seperti yang terlihat dalam faultstring.

      Karena “UTF-8” bukan encoding yang didukung di Apigee Edge, permintaan gagal dengan error 415 Unsupported Media Type beserta kode error: protocol.http.UnsupportedEncoding.

    Alat rekaman aktivitas

    Menggunakan Rekaman Aktivitas:
    1. Jika Anda tidak memiliki jejak untuk permintaan yang gagal, buka Resolusi.
    2. Jika telah merekam aktivitas kegagalan, Anda dapat menentukan jaringan encoding yang diteruskan oleh server backend sebagai bagian dari respons Content-Encoding seperti yang dijelaskan dalam Alat trace.

Resolusi

  1. Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung
  2. Pastikan server backend selalu mengirimkan hal berikut:
    • Hanya encoding yang didukung sebagai nilai ke Header Content-Encoding dalam permintaan
    • Payload respons dalam format yang didukung ke Apigee Edge dan cocok dengan format ditentukan di header Content-Encoding

Encoding yang didukung

Tabel berikut mencantumkan format encoding yang didukung oleh Apigee Edge:

Header Encoding Deskripsi
Content-Encoding gzip Format gzip Unix
deflate Format ini menggunakan struktur zlib dengan algoritma kompresi deflate.

Spesifikasi

Apigee merespons dengan respons error 415 Unsupported Media Type sesuai dengan spesifikasi RFC berikut:

Spesifikasi
RFC 7231, bagian 6.5.13: 415 Jenis Media yang Tidak Didukung

Poin penting yang perlu diperhatikan

Perhatikan hal berikut:

  • Jika error 415 ditampilkan oleh Apigee karena encoding yang tidak didukung diteruskan header Content-Encoding sebagai bagian dari permintaan API, lalu:
    • Anda tidak akan dapat merekam aktivitas untuk permintaan tersebut.
    • Anda tidak akan dapat mengubah format atau isi respons {i>error<i} yang dikirim oleh Apigee Edge menggunakan kebijakan seperti RaiseFault dan MenetapkanPesan.

    Hal ini karena error ini terjadi pada fase awal di Pemroses Pesan sebelum kebijakan dapat dijalankan.

  • Jika error 415 ditampilkan oleh Apigee karena encoding yang tidak didukung diteruskan di header respons dari server backend, lalu itu harus diperbaiki di server backend untuk menghindari {i>error<i} ini. Harap bekerja sama dengan tim backend Anda jika diperlukan untuk memperbaiki masalah ini.

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

Harus mengumpulkan informasi diagnostik

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, 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 error 415
  • 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~ENV.PORT#_access_log

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

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