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:
- Login ke akun Apigee Edge.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah ini:
- Buka Analyze > Pemantauan API > Investigasi.
- Pilih jangka waktu tertentu saat Anda melihat error.
- Pastikan filter Proxy disetel ke Semua.
- Gambarkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.UnsupportedEncoding
seperti yang ditunjukkan di bawah:Informasi tentang kode kesalahan
protocol.http.UnsupportedEncoding
ditampilkan seperti yang ditunjukkan di bawah:Klik Lihat log dan luaskan salah satu permintaan yang gagal dengan
415
untuk melihat informasi selengkapnya:- Dari jendela Logs, perhatikan detail berikut:
- Sumber Kesalahan: Informasi ini menunjukkan bahwa error ditampilkan oleh
apigee
atautarget
. - Kode Kesalahan: Ini seharusnya cocok dengan
protocol.http.UnsupportedEncoding
.
- Sumber Kesalahan: Informasi ini menunjukkan bahwa error ditampilkan oleh
- Jika Sumber Kesalahan adalah
apigee
, hal tersebut menunjukkan bahwa permintaan berisi encoding yang tidak didukung di headerContent-Encoding
. - Jika Sumber Kesalahan adalah
target
, maka hal itu menunjukkan bahwa server backend respons berisi encoding yang tidak didukung di headerContent-Encoding
.
Alat rekaman aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- 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.
- Tunggu hingga error
Pastikan Tampilkan semua FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
- Menavigasi melalui berbagai fase pelacakan dan menemukan tempat terjadinya kegagalan.
Anda akan menemukan error yang biasanya ada dalam alur setelah Permintaan dikirim ke target server seperti yang ditunjukkan di bawah ini:
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 responsContent-Encoding
dengan nilai dari"utf-8"
, yang bukan encoding yang didukung di Apigee.- Buka Fase AX (Data Analytics Direkam) di rekaman aktivitas, lalu klik Fase tersebut.
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:
Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.UnsupportedEncoding
dantarget
, yang menunjukkan bahwa error disebabkan karena nilai encoding"utf-8"
yang tidak didukung diteruskan oleh server backend di header responsContent-Encoding
.Header Respons Nilai X-Apigee-fault-code protocol.http.UnsupportedEncoding
X-Apigee-fault-source target
- Periksa apakah Anda menggunakan
perantaian proxy; yaitu, jika server target/endpoint target memanggil
di Apigee.
Untuk menentukannya, kembali ke fase Permintaan dikirim ke server target. Klik Show Curl.
- Jendela Curl for Request Sent to Target Server akan terbuka dan Anda dapat menentukan alias {i>host<i} server target.
- 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
. - 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:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan
informasi penting tentang error
415
HTTP. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Menelusuri Error
415
selama durasi tertentu (jika masalah terjadi sebelumnya) atau jika ada permintaan yang masih gagal dengan415
. Jika Anda menemukan error
415
dengan pencocokan X-Apigee-fault-code nilaiprotocol.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
- 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.
- Jika Kode Kesalahan adalah
protocol.http.UnsupportedEncoding
dan Kesalahan Sumber memiliki nilaiapigee
atauMP
, ini menunjukkan bahwa permintaan yang dikirim oleh aplikasi klien berisi encoding yang tidak didukung dalam header permintaanContent-Encoding
. - 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: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\""
Dalam pesan error di atas, perhatikan bahwa nilai encoding yang tidak didukung adalah
“UTF-8”
seperti yang terlihat dalamfaultstring
.Karena
“UTF-8”
bukan encoding yang didukung di Apigee Edge, permintaan ini gagal dengan error415 Unsupported Media Type
dengan kode error:protocol.http.UnsupportedEncoding
.
Permintaan sebenarnya
Menggunakan permintaan yang sebenarnya:- Jika Anda tidak memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, buka Resolusi.
- Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, lakukan
langkah-langkah berikut:
- Tentukan nilai yang diteruskan ke header permintaan
Content-Encoding.
- 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 headerContent- Encoding
, yang bukan Encoding yang Didukung di Apigee Edge. Oleh karena itu, permintaan ini gagal dengan error415 Unsupported Media Type
yang disertai kode error:protocol.http.UnsupportedEncoding
.
- Tentukan nilai yang diteruskan ke header permintaan
Resolusi
- Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung.
- 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
- Hanya encoding yang didukung sebagai nilai pada header
Pada contoh di atas, payload permintaan memiliki ekstensi
gz
yang menunjukkan bahwa kontennya harusgzip
. Anda dapat memperbaiki masalah ini dengan mengirimkan header permintaan sebagaiContent-Encoding: gzip
dan payload permintaan dalam formatgzip
:curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
Penyebab: Respons encoding tidak didukung
Diagnosis
- 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.
- Jika Fault Source memiliki nilai
target
, ini menunjukkan bahwa Respons yang dikirim oleh server backend berisi encoding yang tidak didukung dalam HeaderContent-Encoding
. - 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: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\""
-
Dalam pesan error di atas, perhatikan bahwa nilai encoding yang tidak didukung adalah
“UTF-8”
seperti yang terlihat dalamfaultstring
.Karena
“UTF-8”
bukan encoding yang didukung di Apigee Edge, permintaan gagal dengan error415 Unsupported Media Type
beserta kode error:protocol.http.UnsupportedEncoding
.
Alat rekaman aktivitas
Menggunakan Rekaman Aktivitas:- Jika Anda tidak memiliki jejak untuk permintaan yang gagal, buka Resolusi.
- 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
- Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung
- 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
- Hanya encoding yang didukung sebagai nilai ke
Header
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 headerContent-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 error415
- 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