Tipi MIME comuni

Server e form di upload si affidano a queste stringhe; un tipo errato può compromettere anteprime, download o la CSP.

Aggiornato:

TipoTipo MIMEEstensione tipica
HTMLtext/html.html
CSStext/css.css
JavaScripttext/javascript.js
JSONapplication/json.json
XMLapplication/xml.xml
Testo semplicetext/plain.txt
CSVtext/csv.csv
PDFapplication/pdf.pdf
ZIPapplication/zip.zip
PNGimage/png.png
JPEGimage/jpeg.jpg
GIFimage/gif.gif
WebPimage/webp.webp
SVGimage/svg+xml.svg
ICOimage/x-icon.ico
MP3audio/mpeg.mp3
WAVaudio/wav.wav
MP4video/mp4.mp4
WebMvideo/webm.webm
WOFF2font/woff2.woff2
Modulo URL-encodedapplication/x-www-form-urlencoded—
Modulo multipartmultipart/form-data—

Note

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.

Fonti