← Semua alat

Referensi Tipe MIME

Apa itu tipe MIME, cara kerja format type/subtype, di mana Content-Type penting dalam HTTP dan email, tipe umum, dan mengapa tipe yang salah menyebabkan masalah.
EkstensiTipe MIME

Apa sebenarnya tipe MIME itu

Tipe MIME, juga disebut tipe media, adalah label singkat yang memberi tahu perangkat lunak jenis data apa yang dikandung berkas atau isi pesan. Label ini lahir di email (singkatan dari Multipurpose Internet Mail Extensions) tetapi kini muncul di mana-mana di web. Formatnya selalu tipe/subtipe: kategori luas, garis miring, dan format spesifik. Jadi text/html berarti "teks, dalam bentuk HTML", image/png berarti "gambar, dalam bentuk PNG", dan application/json berarti "data aplikasi, dikodekan sebagai JSON".

Tipe tingkat atas berasal dari sekumpulan tetap yang dikelola IANA, registri resmi: text, image, audio, video, application, font, model, multipart, dan beberapa yang lebih baru seperti haptics. Subtipe adalah format spesifiknya. Vendor dapat menambahkan milik mereka sendiri dengan awalan vnd. (misalnya application/vnd.ms-excel), dan tipe eksperimental secara historis menggunakan awalan x-, meskipun konvensi tersebut kini tidak lagi dianjurkan.

Ikon format berkas bercahaya abstrak yang disusun ke dalam petak kategori berlabel di latar belakang indigo gelap
Setiap format berkas dipetakan ke label tipe/subtipe.

Di mana tipe MIME berperan penting

Tempat terpenting tipe MIME muncul adalah header respons HTTP Content-Type. Ketika server mengirim halaman, gambar, atau muatan API, header ini memberi tahu browser cara menginterpretasikan byte tersebut. Jika header mengatakan text/html, browser merender markup; jika mengatakan application/json, panggilan fetch() dapat mengurainya; jika mengatakan application/pdf, penampil bawaan terbuka. Header yang sama juga berjalan di sisi permintaan: ketika Anda POST formulir atau isi API, Content-Type memberi tahu server cara membaca apa yang Anda kirim.

Di luar HTTP, tipe MIME menjalankan beberapa sistem lain. Klien email menggunakannya untuk memutuskan apakah lampiran adalah gambar untuk dipratinjau atau biner untuk disimpan. Pengendali unggah berkas memeriksa tipe yang dinyatakan untuk menerima atau menolak berkas. Sistem operasi atau browser menggunakan tipe, bukan hanya ekstensi berkas, untuk memilih aplikasi default. Ide yang sama mendasari cara server melaporkan hasil dan kesalahan bersama kode status HTTP — respons 200 dengan tipe yang salah bisa sama rusaknya dengan 404.

Yang akan Anda gunakan setiap hari

Sejumlah tipe mencakup sebagian besar lalu lintas nyata:

  • text/html — halaman web (ekstensi .html)
  • text/css — lembar gaya (.css)
  • text/javascript — tipe yang direkomendasikan untuk JavaScript (.js, .mjs)
  • application/json — satu-satunya tipe JSON resmi, didefinisikan dalam RFC 8259 (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — format gambar umum
  • application/pdf — dokumen PDF (.pdf)
  • application/octet-stream — tangkapan semua untuk data biner yang tidak diketahui atau sembarang
  • text/plain — default untuk teks biasa yang tidak memiliki tipe lebih kaya

JSON layak mendapat catatan karena sering membingungkan orang. Satu-satunya tipe yang benar adalah application/json. Kode lama terkadang menggunakan text/json, text/plain, atau application/x-javascript, tetapi itu sudah usang dan beberapa klien akan menolak mengurainya. Tidak ada pula parameter charset untuk JSON — spesifikasi mengharuskan UTF-8, jadi menulis application/json; charset=utf-8 berlebihan meskipun tidak berbahaya. Untuk tabel format dan ekstensi yang lebih lengkap, lihat tabel referensi kami.

Paket data bercahaya yang diberi label tipe abstrak mengalir melalui koneksi jaringan
Content-Type berjalan bersama muatan melalui HTTP.

Mengapa Content-Type yang salah merusak segalanya

Browser dan klien mempercayai tipe yang dinyatakan, sehingga kesalahan dalam menetapkannya memiliki konsekuensi nyata. Sajikan respons API JSON sebagai text/html dan browser mungkin mencoba merendernya, atau klien yang ketat mungkin melempar kesalahan penguraian sebelum kode Anda pernah berjalan. Sajikan berkas CSS atau JavaScript dengan tipe yang salah dan fitur keamanan bernama X-Content-Type-Options: nosniff akan membuat browser menolak untuk menerapkannya, sehingga secara diam-diam merusak gaya halaman atau skrip Anda.

Unduhan adalah kegagalan klasik lainnya. Jika Anda ingin berkas diunduh daripada ditampilkan, tipe penting bersama header Content-Disposition. PDF yang dikirim sebagai application/octet-stream diunduh sebagai berkas generik alih-alih dibuka di penampil; gambar yang dikirim sebagai text/plain tampil sebagai karakter acak. Di sisi unggah, berkas yang salah diberi label dapat lolos dari pemeriksaan ekstensi yang naif, itulah mengapa validator yang kuat memeriksa byte nyata (angka ajaib) daripada mempercayai tipe yang disediakan klien.

Secara historis, browser mencoba menebak, atau "mengendus", tipe nyata ketika header tampak salah. Perilaku itu menimbulkan celah keamanan, sehingga praktik terbaik modern adalah selalu mengirim Content-Type yang akurat dan menonaktifkan pengendus dengan nosniff. Singkatnya: tetapkan tipe secara sengaja pada setiap respons, dan sebagian besar bug rendering, unduhan, dan penguraian akan hilang.

Pertanyaan yang sering diajukan

Apa perbedaan antara tipe MIME dan tipe media?

Keduanya adalah hal yang sama. "Tipe MIME" adalah nama lama dari email, sedangkan "tipe media" adalah istilah yang disukai IANA dan spesifikasi HTTP modern. Keduanya merujuk pada label tipe/subtipe.

Apa tipe MIME yang benar untuk JSON?

Itu adalah application/json, yang didefinisikan dalam RFC 8259. Alternatif lama seperti text/json atau application/x-javascript sudah usang dan beberapa klien akan menolaknya.

Apa arti application/octet-stream?

Ini adalah tipe generik untuk data biner sembarang tanpa label yang lebih spesifik. Server menggunakannya sebagai cadangan untuk tipe berkas yang tidak diketahui, yang biasanya memicu unduhan daripada tampilan di browser.

Mengapa berkas CSS atau JavaScript saya tidak dimuat?

Seringkali server mengirimkannya dengan Content-Type yang salah. Dengan X-Content-Type-Options yang diatur ke nosniff, browser menolak untuk menerapkan CSS yang bukan text/css atau skrip yang bukan tipe JavaScript. Perbaiki konfigurasi server agar tipe yang tepat dikirim.

Bisakah saya menambahkan charset ke tipe MIME?

Ya, untuk format teks, menggunakan parameter seperti text/html; charset=utf-8. Untuk JSON tidak perlu karena format tersebut selalu UTF-8 berdasarkan spesifikasi, meskipun menambahkannya tidak berbahaya.

Apakah ekstensi berkas menentukan tipe MIME?

Tidak melalui HTTP. Server memutuskan Content-Type mana yang akan dikirim, dan browser mempercayai header tersebut. Ekstensi hanya bertindak sebagai petunjuk untuk alat dan sistem operasi ketika tidak ada tipe eksplisit yang disediakan.