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 ke Apigee tidak berisi encoding yang didukung oleh Apigee, sesuai spesifikasi RFC 7231, bagian 6.5.13: 415 Supported Media Type.

Kemungkinan penyebab error ini adalah sebagai berikut:

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

Langkah-langkah diagnosis umum

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

Pemantauan API

Untuk mendiagnosis error menggunakan API Monitoring:

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

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

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

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

  10. Dari jendela Logs, perhatikan detail berikut:
    • Fault Source: Ini menampilkan bahwa error ditampilkan oleh apigee atau target.
    • Kode Kesalahan: Ini harus cocok dengan protocol.http.UnsupportedEncoding.
  11. Jika Sumber Kesalahan adalah apigee, berarti permintaan berisi encoding yang tidak didukung di header Content-Encoding.
  12. Jika Sumber Kesalahan adalah target, berarti respons server backend berisi encoding yang tidak didukung di header Content-Encoding.

Alat pelacak

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi perekaman aktivitas dan:
    • Tunggu hingga error 415 Unsupported Media Type terjadi, atau
    • Jika Anda dapat merekonstruksi masalah, buat panggilan API untuk mereproduksi error 415 Unsupported Media Type.
  2. Pastikan Show all FlowInfos diaktifkan:

    panel lihat opsi, tampilkan semua flowinfos
  3. Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
  4. Jelajahi berbagai fase rekaman aktivitas dan temukan lokasi terjadinya kegagalan.
  5. Anda akan menemukan error biasanya dalam flow setelah fase Request sent to target server seperti yang ditunjukkan di bawah ini:

  6. Catat nilai error dari rekaman aktivitas.

    Rekaman aktivitas contoh di atas menampilkan error sebagai Unsupported Encoding "utf-8". Karena error dipicu oleh Apigee setelah permintaan dikirim ke server backend, hal ini menunjukkan bahwa server backend mengirim header respons Content-Encoding dengan nilai "utf-8", yang bukan encoding yang didukung di Apigee.

  7. Buka Fase AX (Data Analytics Dicatat) di trace, lalu klik Fase tersebut.
  8. Scroll ke bawah ke bagian Error / Response Headers di panel Phase Details, lalu tentukan 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 ini 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 proxy lain di Apigee.
    1. Untuk menentukan hal ini, buka kembali 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 host server target.
    3. Jika alias host server target mengarah ke alias host virtual, alias itu adalah perantaian proxy. Dalam hal ini, Anda perlu mengulangi semua langkah di atas untuk proxy berantai sampai Anda menentukan penyebab error 415 Unsupported Media Type.
    4. Jika alias host server target menunjuk ke server backend Anda, itu menandakan 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. Telusuri 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 X-Apigee-fault-code yang cocok dengan nilai protocol.http.UnsupportedEncoding, tentukan nilai 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 Monitoring atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Fault Code adalah protocol.http.UnsupportedEncoding dan Fault Source memiliki nilai apigee atau MP, ini menunjukkan bahwa permintaan yang dikirim oleh aplikasi klien berisi encoding yang tidak didukung di 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, lihat faultstring. faultstring berisi nilai endcoding yang 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 ini gagal dengan error 415 Unsupported Media Type yang berisi kode error: protocol.http.UnsupportedEncoding.

    Permintaan sebenarnya

    Menggunakan permintaan aktual:
    1. Jika Anda tidak memiliki akses ke permintaan aktual yang dibuat oleh aplikasi klien, buka Resolution.
    2. Jika Anda memiliki akses ke permintaan aktual 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 di Encoding yang didukung, berarti itulah penyebab error 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 merupakan Encoding yang Didukung di Apigee Edge. Oleh karena itu, permintaan ini gagal dengan error 415 Unsupported Media Type dengan kode error: protocol.http.UnsupportedEncoding.

Resolusi

  1. Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung.
  2. Pastikan aplikasi klien selalu mengirim hal berikut:
    • Hanya encoding yang didukung sebagai nilai ke header Content-Encoding dalam permintaan
    • Payload permintaan dalam format yang didukung ke Apigee Edge dan cocok dengan format yang ditentukan dalam header Content-Encoding
  3. Pada contoh di atas, payload permintaan memiliki ekstensi gz yang menunjukkan bahwa konten harus berupa 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: Encoding tidak didukung sebagai respons

Diagnosis

  1. Tentukan Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan Pemantauan API, Alat Pelacakan, atau log akses 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 di 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 yang 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 ini gagal dengan error 415 Unsupported Media Type yang berisi kode error: protocol.http.UnsupportedEncoding.

    Alat pelacak

    Menggunakan Trace:
    1. Jika Anda tidak memiliki rekaman aktivitas untuk permintaan yang gagal, buka Resolution.
    2. Jika telah merekam rekaman aktivitas kegagalan, Anda dapat menentukan encoding yang tidak didukung yang diteruskan oleh server backend sebagai bagian dari header respons Content-Encoding seperti yang dijelaskan di Alat pelacakan.

Resolusi

  1. Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung
  2. Pastikan server backend selalu mengirim 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 yang ditentukan dalam 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 algoritme kompresi deflate.

Spesifikasi

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

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

Poin-poin penting yang perlu diperhatikan

Perhatikan hal berikut:

  • Jika error 415 ditampilkan oleh Apigee karena encoding yang tidak didukung diteruskan di header Content-Encoding sebagai bagian dari permintaan API, maka:
    • Anda tidak akan dapat merekam aktivitas untuk permintaan tersebut.
    • Anda tidak akan dapat mengubah format atau isi respons error yang dikirim oleh Apigee Edge menggunakan kebijakan seperti RaiseFault, ProvideMessage.

    Hal ini dikarenakan error ini terjadi pada fase awal dalam Pemroses Pesan sebelum kebijakan apa pun dapat dijalankan.

  • Jika error 415 ditampilkan oleh Apigee karena encoding yang tidak didukung diteruskan di header respons dari server backend Anda, error tersebut harus diperbaiki di server backend untuk menghindari error ini. Silakan bekerja sama dengan tim backend Anda untuk memperbaiki masalah ini.

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

Harus mengumpulkan informasi diagnostik

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:

Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:

  • Nama organisasi
  • Nama lingkungan
  • Nama Proxy API
  • Selesaikan 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

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

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