Tipe MIME yang umum
Server dan formulir unggahan mengandalkan string ini; tipe yang salah bisa merusak pratinjau, unduhan, atau CSP Anda.
| Jenis | Tipe MIME | Ekstensi umum |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| Teks biasa | text/plain | .txt |
| CSV | text/csv | .csv |
| application/pdf | ||
| ZIP | application/zip | .zip |
| PNG | image/png | .png |
| JPEG | image/jpeg | .jpg |
| GIF | image/gif | .gif |
| WebP | image/webp | .webp |
| SVG | image/svg+xml | .svg |
| ICO | image/x-icon | .ico |
| MP3 | audio/mpeg | .mp3 |
| WAV | audio/wav | .wav |
| MP4 | video/mp4 | .mp4 |
| WebM | video/webm | .webm |
| WOFF2 | font/woff2 | .woff2 |
| Formulir terenkode URL | application/x-www-form-urlencoded | — |
| Formulir multipart | multipart/form-data | — |
Catatan
- Beberapa peramban mengendus konten; tetap kirim tipe yang benar dari server Anda.
- Tipe resmi JS adalah text/javascript (application/javascript sudah usang).
Apa yang sebenarnya dikendalikan oleh tipe MIME
Tipe MIME adalah label yang dilekatkan server pada respons untuk memberi tahu browser jenis data apa yang dikirim. text/html menampilkan halaman, application/pdf membuka pembaca, image/svg+xml dapat digambar secara inline, dan application/octet-stream memicu permintaan unduhan. Dua file yang tampak identik dapat berperilaku sangat berbeda hanya berdasarkan satu header ini. Browser, formulir unggah, klien email, dan aturan keamanan konten semuanya membacanya, sehingga kesalahan pada hal ini merupakan penyebab umum dari pratinjau yang rusak, unduhan paksa, dan skrip yang diblokir.
Di mana text/ dan application/ berlaku hari ini
Saran lama mengatakan JavaScript adalah application/javascript; standar saat ini adalah text/javascript dan application/javascript sudah usang. CSS adalah text/css, HTML adalah text/html, teks polos adalah text/plain dan CSV adalah text/csv — semuanya text/* karena dirancang untuk dapat dibaca manusia. Format terstruktur adalah application/*: application/json, application/xml, application/pdf, application/zip. Pengecualian penting adalah SVG, yang merupakan XML tetapi harus disajikan sebagai image/svg+xml agar browser menampilkannya daripada mengunduhnya.
Tipe yang salah merusak unggahan dan keamanan
Unggahan yang salah label merupakan sumber bug klasik: file JSON yang disajikan sebagai text/plain mungkin ditolak oleh klien API, gambar yang dikembalikan sebagai octet-stream akan mengunduh alih-alih menampilkan, dan skrip yang disajikan sebagai text/html diblokir oleh browser. Aturan Content-Security-Policy yang ketat mengunci pada tipe MIME, sehingga stylesheet yang disajikan dengan tipe yang salah dapat ditolak sama sekali. Ketika pratinjau atau unduhan berperilaku aneh, memeriksa Content-Type respons biasanya merupakan diagnosa tercepat.
Charset dan content sniffing
Untuk tipe teks, gandungkan tipe MIME dengan charset — text/html; charset=utf-8 dan application/json; charset=utf-8 adalah default yang aman untuk apa pun yang multibahasa. Browser lama menggunakan content sniffing untuk menebak tipe dari byte file, yang dimanfaatkan penyerang; mengirim X-Content-Type-Options: nosniff memberi tahu browser untuk memercayai tipe yang dinyatakan daripada menebaknya. Selalu kirim Content-Type yang eksplisit dan benar, bukan mengandalkan ekstensi file, yang tidak pernah dilihat oleh browser.
Menetapkan tipe pada server dan dalam formulir
Di mana tipe berasal itu penting. Host statis memetakan ekstensi secara otomatis, tetapi kerangka kerja web sering kali perlu diatur secara eksplisit — di Express dengan res.type('json'), di Nginx melalui blok types, dan di Cloudflare Pages melalui header atau ekstensi file. Formulir HTML menggunakan enctype untuk mengendalikan pengkodean unggahan: multipart/form-data untuk file dan application/x-www-form-urlencoded untuk bidang teks polos, sedangkan API yang mengharapkan JSON mengirim application/json. Mengirim yang salah merupakan sumber sunyi dari respons 415 Unsupported Media Type dan 400 yang tampak misterius hingga Anda memeriksa header permintaan.
Keluarga lain yang perlu dikenali
Di luar format web sehari-hari, beberapa keluarga perlu dikenali. Font menggunakan font/woff2 dan font/ttf. Gambar terbagi berdasarkan format — image/jpeg, image/png, image/webp, image/avif, image/gif — sementara audio dan video menggunakan audio/mpeg, audio/ogg, video/mp4 dan video/webm. Arsip dan blob biner adalah application/zip, application/gzip dan application/octet-stream. Ketika API mengembalikan file yang tidak dapat diidentifikasi, octet-stream adalah jawaban yang jujur: hal ini memaksa klien untuk mengunduh daripada menebak, yang merupakan perilaku yang Anda inginkan ketika isi konten tidak diketahui.
Pertanyaan umum
- Tipe MIME apa yang sebaiknya dipakai untuk file .json?
- Gunakan application/json untuk file JSON dan respons API. Itu tipe standarnya, sebaiknya dikirim dengan UTF-8.
- Apa tipe MIME untuk file .js?
- Tipe resmi JavaScript adalah text/javascript. Application/javascript yang lama sudah usang dan sebaiknya tidak dipakai lagi.
- Apa tipe MIME untuk gambar SVG?
- File SVG memakai image/svg+xml. Hanya dengan tipe itu peramban menampilkannya secara inline.