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:
- Login ke akun Apigee Edge Anda.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah:
- Buka halaman Analyze > API Monitoring > Menyelidiki.
- Pilih jangka waktu spesifik saat Anda melihat error.
- Pastikan filter Proxy disetel ke Semua.
- Tempatkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.UnsupportedEncoding
seperti yang ditunjukkan di bawah ini:Informasi tentang kode kesalahan
protocol.http.UnsupportedEncoding
ditampilkan seperti yang ditunjukkan di bawah ini:Klik Lihat log dan luaskan salah satu permintaan yang gagal dengan error
415
untuk melihat informasi selengkapnya:- Dari jendela Logs, perhatikan detail berikut:
- Fault Source: Ini menampilkan bahwa error ditampilkan oleh
apigee
atautarget
. - Kode Kesalahan: Ini harus cocok dengan
protocol.http.UnsupportedEncoding
.
- Fault Source: Ini menampilkan bahwa error ditampilkan oleh
- Jika Sumber Kesalahan adalah
apigee
, berarti permintaan berisi encoding yang tidak didukung di headerContent-Encoding
. - Jika Sumber Kesalahan adalah
target
, berarti respons server backend berisi encoding yang tidak didukung di headerContent-Encoding
.
Alat pelacak
Untuk mendiagnosis error menggunakan alat Trace:
- 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
.
- Tunggu hingga error
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
- Jelajahi berbagai fase rekaman aktivitas dan temukan lokasi terjadinya kegagalan.
Anda akan menemukan error biasanya dalam flow setelah fase Request sent to target server seperti yang ditunjukkan di bawah ini:
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 responsContent-Encoding
dengan nilai"utf-8"
, yang bukan encoding yang didukung di Apigee.- Buka Fase AX (Data Analytics Dicatat) di trace, lalu klik Fase tersebut.
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:
Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.UnsupportedEncoding
dantarget
, yang menunjukkan bahwa error ini 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
proxy lain di Apigee.
Untuk menentukan hal ini, buka kembali fase Permintaan dikirim ke server target. Klik Show Curl.
- Jendela Curl for Request Sent to Target Server akan terbuka dan Anda dapat menentukan alias host server target.
- 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
. - 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:
- 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
- Telusuri Error
415
selama durasi tertentu (jika masalah terjadi sebelumnya) atau jika ada permintaan yang masih gagal dengan415
. Jika Anda menemukan error
415
dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.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
- 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.
- Jika Fault Code adalah
protocol.http.UnsupportedEncoding
dan Fault Source memiliki nilaiapigee
atauMP
, ini menunjukkan bahwa permintaan yang dikirim oleh aplikasi klien berisi encoding yang tidak didukung di 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, lihat
faultstring
.faultstring
berisi nilai endcoding yang 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 ini gagal dengan error415 Unsupported Media Type
yang berisi kode error:protocol.http.UnsupportedEncoding
.
Permintaan sebenarnya
Menggunakan permintaan aktual:- Jika Anda tidak memiliki akses ke permintaan aktual yang dibuat oleh aplikasi klien, buka Resolution.
- Jika Anda memiliki akses ke permintaan aktual 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 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 headerContent- Encoding
, yang bukan merupakan Encoding yang Didukung di Apigee Edge. Oleh karena itu, permintaan ini gagal dengan error415 Unsupported Media Type
dengan 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 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
- Hanya encoding yang didukung sebagai nilai ke header
Pada contoh di atas, payload permintaan memiliki ekstensi
gz
yang menunjukkan bahwa konten harus berupagzip
. 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: Encoding tidak didukung sebagai respons
Diagnosis
- 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.
- Jika Fault Source memiliki nilai
target
, ini menunjukkan bahwa respons yang dikirim oleh server backend berisi encoding yang tidak didukung di 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 yang 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 ini gagal dengan error415 Unsupported Media Type
yang berisi kode error:protocol.http.UnsupportedEncoding
.
Alat pelacak
Menggunakan Trace:- Jika Anda tidak memiliki rekaman aktivitas untuk permintaan yang gagal, buka Resolution.
- 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
- Lihat daftar encoding yang didukung oleh Apigee di Encoding yang didukung
- 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
- 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 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 headerContent-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 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
Tempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message- processor/logs/system.log