Tipi MIME comuni
Server e form di upload si affidano a queste stringhe; un tipo errato può compromettere anteprime, download o la CSP.
| Tipo | Tipo MIME | Estensione tipica |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| Testo semplice | 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 |
| Modulo URL-encoded | application/x-www-form-urlencoded | — |
| Modulo multipart | multipart/form-data | — |
Note
- Alcuni browser analizzano il contenuto; invia comunque il tipo corretto dal server.
- Il tipo ufficiale di JS è text/javascript (application/javascript è obsoleto).
Cosa controlla effettivamente il tipo MIME
Un tipo MIME è l'etichetta che un server associa a una risposta per indicare al browser che cosa contengono i byte. text/html visualizza una pagina, application/pdf apre un lettore, image/svg+xml può essere disegnato inline, e application/octet-stream attiva un prompt di download. Due file identici possono comportarsi in modo completamente diverso in base a questo singolo header. Browser, moduli di caricamento, client di posta elettronica e regole di sicurezza dei contenuti lo leggono tutti, quindi sbagliarlo è una causa comune di anteprime interrotte, download forzati e script bloccati.
Dove text/ e application/ si applicano oggi
Vecchi consigli affermavano che JavaScript fosse application/javascript; lo standard attuale è text/javascript e application/javascript è obsoleto. CSS è text/css, HTML è text/html, testo semplice è text/plain e CSV è text/csv — tutti text/* perché sono stati progettati per essere leggibili dall'umano. I formati strutturati sono application/*: application/json, application/xml, application/pdf, application/zip. L'eccezione notevole è SVG, che è XML ma deve essere servito come image/svg+xml affinché i browser lo renderizzino invece di scaricarlo.
Tipi errati compromettono i caricamenti e la sicurezza
Un caricamento etichettato male è una fonte classica di bug: un file JSON servito come text/plain può essere rifiutato da un client API, un'immagine restituita come octet-stream viene scaricata invece di essere visualizzata, e uno script servito come text/html è bloccato dal browser. Regole severe Content-Security-Policy dipendono dal tipo MIME, quindi un foglio di stile servito con il tipo sbagliato può essere rifiutato del tutto. Quando un'anteprima o un download si comporta in modo strano, controllare il Content-Type della risposta è di solito la diagnosi più rapida.
Charset e content sniffing
Per i tipi testuali, abbinare il tipo MIME a un charset — text/html; charset=utf-8 e application/json; charset=utf-8 sono le impostazioni predefinite sicure per qualsiasi contenuto multilingua. I browser più vecchi usavano il content sniffing per indovinare un tipo dai byte del file, cosa che gli attaccanti hanno sfruttato; inviare X-Content-Type-Options: nosniff dice ai browser di fidarsi del tipo dichiarato. Inviare sempre un Content-Type esplicito e corretto invece di affidarsi all'estensione del file, che il browser non vede mai.
Impostare i tipi sul server e nei moduli
Da dove proviene il tipo conta. Gli host statici mappano automaticamente le estensioni, ma i framework web spesso richiedono di impostarlo esplicitamente — in Express con res.type('json'), in Nginx tramite il blocco types, e su Cloudflare Pages tramite header o l'estensione del file. I moduli HTML usano enctype per controllare la codifica di caricamento: multipart/form-data per i file e application/x-www-form-urlencoded per i campi semplici, mentre un'API che si aspetta JSON invia application/json. Inviarne uno errato è una fonte silenziosa di risposte 415 Unsupported Media Type e 400 che sembrano misteriose finché non si ispeziona l'header della richiesta.
Altre famiglie da riconoscere
Oltre ai formati web quotidiani, alcune famiglie vale la pena riconoscere. I font usano font/woff2 e font/ttf. Le immagini si dividono per formato — image/jpeg, image/png, image/webp, image/avif, image/gif — mentre audio e video usano audio/mpeg, audio/ogg, video/mp4 e video/webm. Gli archivi e i blob binari sono application/zip, application/gzip e application/octet-stream. Quando un'API restituisce un file che non riesce a identificare, octet-stream è la risposta onesta: costringe il client a scaricare invece di indovinare, che è esattamente il comportamento desiderato quando i contenuti sono sconosciuti.
Domande frequenti
- Quale tipo MIME usare per un file .json?
- Usa application/json per i file JSON e le risposte delle API. È il tipo standard, meglio se servito in UTF-8.
- Qual è il tipo MIME dei file .js?
- Il tipo ufficiale di JavaScript è text/javascript. Il vecchio application/javascript è obsoleto e non va più usato.
- Qual è il tipo MIME di un’immagine SVG?
- I file SVG usano image/svg+xml. Solo con questo tipo i browser li visualizzano inline.