415 Unsupported Media Type
Penggunaan
Ketika pesan error 415 Unsupported Media Type diterima, penyebabnya sering kali adalah header Content-Type atau Content-Encoding yang ditolak oleh server. Sebagai alternatif, server mengembalikan error ini berdasarkan pemeriksaan lebih lanjut terhadap body pesan.
Pada kasus terakhir, server menunjukkan error ini karena gagal mengurai atau mengenali kontennya. Ketika server mengenali media type tetapi tidak mendukung formatnya, 415 Unsupported Media Type adalah response paling akurat. Ketika konten memiliki kesalahan struktural, 400 atau 422 lebih tepat.
Error ini mirip dengan 406, hanya saja 415 Unsupported Media Type didasarkan pada header Content-Type dan Content-Encoding, bukan pada header Accept.
Dampak SEO
Mesin pencari seperti Google tidak akan mengindeks URL dengan status response 415. URL yang sebelumnya terindeks akan dihapus dari hasil pencarian.
Contoh
Klien ingin mengirim sebuah pesan dalam teks biasa, tetapi server mengirim 415 Unsupported Media Type karena hanya pesan HTML yang diterima. Klien kemudian mengubah header Content-Type, tetapi membiarkan pesan aslinya tidak berubah. Server mengenali bahwa body tersebut bukan HTML yang valid dan menolak permintaan itu untuk kedua kalinya.
Permintaan awal
POST /blog/newmessage HTTP/1.1
Host: example.com
Content-Type: text/plain
Content-Length: 24
Good morning, Everybody!
Response awal, berdasarkan header Content-Type
HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
Content-Length: 138
<html>
<head>
<title>Unsupported Format</title>
</head>
<body>
<p>Please use HTML to post new messages.</p>
</body>
</html>
Permintaan berikutnya yang mencoba melewati validasi
POST /blog/newmessage HTTP/1.1
Host: example.com
Content-Type: text/html
Content-Length: 24
Good morning, Everybody!
Response berikutnya, berdasarkan pemeriksaan body pesan
HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
Content-Length: 151
<html>
<head>
<title>Unsupported Format</title>
</head>
<body>
<p>No HTML tags found. Use HTML to post messages.
</p>
</body>
</html>
Cara memperbaiki
Pastikan header Content-Type cocok dengan format yang diterima server. Dokumentasi API biasanya mencantumkan media type yang didukung. Nilai yang umum mencakup application/json, application/xml, multipart/form-data, dan application/x-www-form-urlencoded.
Isi body harus sesuai dengan Content-Type yang dideklarasikan. Mengirim teks biasa dengan Content-Type: application/json akan gagal karena server mencoba mengurai body tersebut sebagai JSON. Sebagian server bersikap ketat terhadap penulisan charset: charset=UTF8 alih-alih charset=UTF-8 memicu penolakan pada platform tertentu.
Periksa header Content-Encoding saat mengirim data terkompresi. Ketidakcocokan antara encoding yang dideklarasikan (misalnya gzip) dan format kompresi body yang sebenarnya menghasilkan 415.
Untuk unggahan berkas, pastikan tipe berkas ada dalam daftar izin server. Server sering membatasi unggahan pada format tertentu seperti JPEG, PNG, atau PDF.
Kesalahan umum pada klien REST API:
Menguji permintaan dengan alat seperti Postman atau curl membantu mengisolasi apakah masalahnya ada pada kode aplikasi atau pada permintaan itu sendiri. Postman menyetel header Content-Type secara otomatis ketika sebuah tipe body dipilih.
Referensi kode
.NET
HttpStatusCode.UnsupportedMediaType
Rust
http::StatusCode::UNSUPPORTED_MEDIA_TYPE
Rails
:unsupported_media_type
Go
http.StatusUnsupportedMediaType
Symfony
Response::HTTP_UNSUPPORTED_MEDIA_TYPE
Python3.5+
http.HTTPStatus.UNSUPPORTED_MEDIA_TYPE
Java
java.net.HttpURLConnection.HTTP_UNSUPPORTED_TYPE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE
Angular
@angular/common/http/HttpStatusCode.UnsupportedMediaType