Cos'è un MIME type?
MIME sta per Multipurpose Internet Mail Extensions. Originariamente sviluppato per le email negli anni '90, è diventato lo standard per identificare il tipo di contenuto in tutte le comunicazioni HTTP.
Un MIME type ha la forma tipo/sottotipo, ad esempio:
text/html— pagina HTMLimage/jpeg— immagine JPEGapplication/json— dati JSONvideo/mp4— video MP4
Come funziona nella pratica
Quando il browser fa una richiesta HTTP, il server risponde con un header Content-Type che include il MIME type del file:
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 4821 <!DOCTYPE html>...
Il browser usa il Content-Type per decidere come trattare il contenuto: visualizzarlo come HTML, eseguirlo come JavaScript, mostrarlo come immagine o proporlo come download.
I MIME type più comuni
| MIME type | Descrizione | Estensioni |
|---|---|---|
text/html | Pagina HTML | .html, .htm |
text/css | Foglio di stile CSS | .css |
text/javascript | Script JavaScript | .js |
application/json | Dati JSON | .json |
application/pdf | Documento PDF | |
image/jpeg | Immagine JPEG | .jpg, .jpeg |
image/png | Immagine PNG | .png |
image/webp | Immagine WebP | .webp |
image/avif | Immagine AVIF | .avif |
image/svg+xml | Grafica vettoriale SVG | .svg |
multipart/form-data | Upload file da form | — |
application/octet-stream | Download generico | qualsiasi |
MIME type nelle API e nelle fetch
Quando invii dati JSON a un'API REST, devi specificare il MIME type nel header Content-Type:
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ nome: 'Mario', eta: 30 })
});
Senza il header corretto, molti server rifiuteranno la richiesta o la interpreteranno in modo errato.
Configurare i MIME type sul server
Apache (.htaccess)
AddType image/webp .webp AddType image/avif .avif AddType application/manifest+json .webmanifest
Nginx (nginx.conf)
types {
image/webp webp;
image/avif avif;
}
MIME type e sicurezza: MIME sniffing
Alcuni browser tentano di "indovinare" il tipo di file analizzando il contenuto, ignorando il MIME type dichiarato. Questo comportamento — chiamato MIME sniffing — può essere sfruttato per attacchi XSS.
Per prevenirlo, aggiungi questo header HTTP alle risposte del tuo server:
X-Content-Type-Options: nosniff
MIME type comuni: guida rapida di riferimento
Conoscere i MIME type più usati ti permette di configurare correttamente il server web, gestire gli upload e debuggare problemi di rendering. Ecco i più importanti suddivisi per categoria:
- Immagini:
image/jpeg,image/png,image/webp,image/avif,image/svg+xml,image/gif - Documenti:
application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document(DOCX) - Dati strutturati:
application/json,application/xml,text/csv,application/yaml - Audio e video:
audio/mpeg,audio/ogg,video/mp4,video/webm - Archivi:
application/zip,application/gzip,application/x-tar - Font:
font/woff2,font/woff,font/ttf - Web:
text/html,text/css,application/javascript,text/plain
Come configurare i MIME type su Apache e Nginx
Se il tuo server serve file con MIME type errati, i browser potrebbero non renderizzarli correttamente — un font .woff2 servito come application/octet-stream non viene caricato da Chrome, per esempio. Ecco come correggere la configurazione:
Apache (.htaccess):
AddType image/webp .webp AddType image/avif .avif AddType font/woff2 .woff2 AddType application/json .json
Nginx (nginx.conf):
types {
image/webp webp;
image/avif avif;
font/woff2 woff2;
application/json json;
}
In Node.js/Express, il modulo mime-types gestisce automaticamente la mappatura. Con res.type('json') imposti application/json senza doverlo digitare ogni volta.
FAQ
Il browser potrebbe rifiutare di eseguire il file o visualizzarlo in modo errato. Ad esempio, JavaScript servito con MIME type sbagliato viene bloccato dai browser moderni in strict mode.
Quasi. Content-Type è l'header HTTP che trasporta il MIME type. Il MIME type è il valore all'interno di quell'header, ad esempio: Content-Type: text/html; charset=UTF-8.
È il MIME type generico per dati binari. Quando un server non conosce il tipo del file, usa application/octet-stream, che indica al browser di proporre il file come download invece di visualizzarlo.