A tipo di media (noto anche come Multipurpose Internet Mail Extensions o tipo MIME) è uno standard che indica la natura e il formato di un documento, file o assortimento di byte. È definito e standardizzato nel programma IETF RFC 6838.

Il Autorità per i numeri assegnati da Internet (IANA) è responsabile di tutti i tipi di MIME ufficiali, ed è possibile trovare l'elenco più aggiornato e completo presso il loro sito web Tipi di media .

Importante: I browser utilizzano il tipo MIME, non l'estensione del file per determinare come processare un URL, quindi è importante che i server web inviino il tipo MIME corretto nella risposta Content-Type della risposta. Se questa non è configurata correttamente, è probabile che i browser interpretino male il contenuto dei file e che i siti non funzionino correttamente e che i file scaricati vengano gestiti in modo errato.

Struttura di un tipo MIME

Il tipo MIME più semplice è costituito da un elemento tipo e un sottotipo; queste sono stringhe che, se concatenate con una barra (/) tra loro, costituiscono un tipo MIME. Non sono ammessi spazi bianchi in un tipo MIME:

type/subtype

Il tipo rappresenta la categoria generale in cui rientra il tipo di dati, ad esempio video o text. Il valore è un sottotipo identifica il tipo esatto di dati del tipo specificato che il tipo MIME rappresenta. Ad esempio, per il tipo MIME textil sottotipo potrebbe essere plain (testo normale), html (HTML codice sorgente), o calendar (per iCalendar/.ics).

Ogni tipo ha il suo insieme di possibili sottotipi e un tipo MIME ha sempre sia un tipo che un sottotipo, mai solo uno o l'altro.

Un'opzione parametro può essere aggiunto per fornire ulteriori dettagli:

type/subtype;parameter=value

Ad esempio, per qualsiasi tipo MIME il cui tipo principale è text, l'opzione charset può essere utilizzato per specificare il set di caratteri utilizzato per i caratteri dei dati. Se non è presente il parametro charset è specificato, il valore predefinito è ASCII (US-ASCII) a meno che non venga sovrascritto dall'opzione dell'agente utente dell'interprete. Per specificare un file di testo UTF-8, il tipo MIME text/plain;charset=UTF-8 viene utilizzato.

I tipi MIME non fanno distinzione tra maiuscole e minuscole, ma sono tradizionalmente scritti in minuscolo, ad eccezione dei valori dei parametri, il cui caso può avere o meno un significato specifico.

Tipi

Esistono due classi di tipi: discreto e multiparte. I tipi discreti sono tipi che rappresentano un singolo file o supporto, come un singolo file di testo o musicale, o un singolo video. Un tipo multipart è un tipo che rappresenta un documento composto da più parti, ognuna delle quali può avere un proprio tipo MIME.e; oppure, un tipo multipart può incapsulare più file che vengono inviati insieme in un'unica transazione. Ad esempio, i tipi MIME multipart sono utilizzati quando si allegano più file a un messaggio di posta elettronica.

Tipi discreti

I tipi discreti attualmente registrati presso la IANA sono:

applicationElenco presso la IANA
Qualsiasi tipo di dati binari che non rientrano esplicitamente in uno degli altri tipi; dati che verranno eseguiti o interpretati in qualche modo o dati binari che richiedono un'applicazione o una categoria di applicazioni specifiche per essere utilizzati. I dati binari generici (o i dati binari il cui vero tipo è sconosciuto) sono application/octet-stream. Altri esempi comuni sono application/pdf, application/pkcs8e application/zip.
audioElenco presso la IANA
Dati audio o musicali. Gli esempi includono audio/mpeg, audio/vorbis.
example
Riservato all'uso come segnaposto negli esempi che mostrano l'uso dei tipi MIME. Non dovrebbero mai essere usati al di fuori degli elenchi di codice di esempio e della documentazione. example può essere usato anche come sottotipoe; per esempio, in un esempio relativo al lavoro con l'audio sul web, il tipo MIME audio/example può essere usato per indicare che il tipo è un segnaposto e deve essere sostituito con uno appropriato quando si usa il codice nel mondo reale.
fontElenco presso la IANA
Dati relativi a font/tipologia. Esempi comuni sono font/woff, font/ttfe font/otf.
imageElenco presso IANA
Immagine o dati grafici, comprese le immagini fisse bitmap e vettoriali e le versioni animate dei formati di immagini fisse, come le immagini animate. GIF o APNG. Esempi comuni sono image/jpeg, image/pnge image/svg+xml.
modelElenco presso la IANA
Dati del modello per un oggetto o una scena 3D. Gli esempi includono model/3mf e model/vml.
textElenco presso IANA
Dati di solo testo, compresi i contenuti leggibili dall'uomo, il codice sorgente o i dati testuali, come i dati in formato CSV (comma-separated value). Gli esempi includono text/plain, text/csve text/html.
videoElenco presso la IANA
Dati o file video, come i filmati MP4 (video/mp4).

Per i documenti di testo senza un sottotipo specifico, text/plain dovrebbe essere utilizzato. Allo stesso modo, per i documenti binari senza un sottotipo specifico o noto, application/octet-stream dovrebbe essere utilizzato.

Tipi multiparte

Multipartita indicano una categoria di documenti suddivisi in parti, spesso con tipi MIME diversi; possono anche essere usati, soprattutto in scenari di posta elettronica, per rappresentare file multipli e separati che fanno tutti parte della stessa transazione. Rappresentano un documento composito.

Ad eccezione di multipart/form-data, utilizzato nel documento POST metodo di Moduli HTML e multipart/byteranges, usati con 206Partial Content per inviare parte di un documento, HTTP non gestisce in modo speciale i documenti multiparte: il messaggio viene trasmesso al browser (che probabilmente mostrerà una finestra "Salva con nome" se non sa come visualizzare il documento).

Esistono due tipi di multipart:

messageElenco presso la IANA
Un messaggio che incapsula altri messaggi. Può essere utilizzato, ad esempio, per rappresentare un messaggio di posta elettronica che include un messaggio inoltrato come parte dei suoi dati, oppure per consentire l'invio di messaggi molto grandi in pezzi come se fossero messaggi multipli. Gli esempi includono message/rfc822 (per la citazione di messaggi inoltrati o a cui si è risposto) e message/partial che consente di suddividere automaticamente un messaggio di grandi dimensioni in messaggi più piccoli che devono essere riassemblati dal destinatario.
multipartElenco presso la IANA
Dati costituiti da più componenti che possono avere individualmente tipi MIME diversi. Gli esempi includono multipart/form-data (per i dati prodotti utilizzando il metodo FormData API) e multipart/byteranges (definito in RFC 7233: 5.4.1 e utilizzato con HTTP's 206 "Contenuto parziale", restituita quando i dati recuperati sono solo una parte del contenuto, come nel caso in cui venga fornita con l'opzione Range ).

Tipi MIME importanti per gli sviluppatori Web

applicazione/flusso di ottetti

È l'impostazione predefinita per i file binari. Significa binario sconosciuto i browser di solito non lo eseguono e non chiedono nemmeno se deve essere eseguito. Lo trattano come se il file Content-Disposition fosse impostato su attachmente propongono una finestra di dialogo "Salva con nome".

testo/plain

È l'impostazione predefinita per i file testuali. Anche se in realtà significa "file testuale sconosciuto", i browser pensano di poterlo visualizzare.

Si noti che text/plain non significa "qualsiasi tipo di dato testuale". Se si aspettano un tipo specifico di dati testuali, è probabile che non lo considerino una corrispondenza. In particolare, se scaricano un file text/plain da un file che dichiara un file CSS, non lo riconosceranno come un file CSS valido se gli viene presentato un file text/plain. Il tipo mime CSS text/css deve essere utilizzato.

testo/css

File CSS utilizzati per lo stile di una pagina Web deve essere inviati con text/css. Se un server non riconosce l'opzione .css per i file CSS, può inviarli con text/plain o application/octet-stream tipi MIME. In tal caso, non saranno riconosciuti come CSS dalla maggior parte dei browser e saranno ignorati.

testo/html

Tutti i contenuti HTML dovrebbero essere serviti con questo tipo. Tipi MIME alternativi per XHTML (come ad esempio application/xhtml+xml) sono per lo più inutili al giorno d'oggi.

Nota: Utilizzare application/xml o application/xhtml+xml se si vogliono le rigide regole di parsing di XML, o elementi che non appartengono agli spazi dei nomi HTML/SVG/MathML.

testo/javascript

Secondo le specifiche HTML, i file JavaScript dovrebbero sempre essere serviti usando il tipo MIME text/javascript. Nessun altro valore è considerato valido e l'uso di uno qualsiasi di questi può causare il mancato caricamento o l'esecuzione degli script.

Per ragioni storiche, il tipo MIME Sniffing Standard (la definizione di come i browser dovrebbero interpretare i tipi di media e capire cosa fare con i contenuti che non ne hanno uno valido) consente di servire JavaScript utilizzando qualsiasi tipo MIME che corrisponde essenzialmente a uno dei seguenti:

  • application/javascript
  • application/ecmascript
  • application/x-ecmascript
  • application/x-javascript
  • text/javascript
  • text/ecmascript
  • text/javascript1.0
  • text/javascript1.1
  • text/javascript1.2
  • text/javascript1.3
  • text/javascript1.4
  • text/javascript1.5
  • text/jscript
  • text/livescript
  • text/x-ecmascript
  • text/x-javascript

Nota: Anche se un dato tipo agente utente possa supportare uno o tutti questi elementi, si dovrebbe usare solo il formato text/javascript. È l'unico tipo MIME garantito per il funzionamento attuale e futuro.

Alcuni contenuti trovati potrebbero avere un tipo charset alla fine dell'elemento text/javascript per specificare il set di caratteri utilizzato per rappresentare il contenuto del codice. Questo non è valido e nella maggior parte dei casi lo script non viene caricato.

Tipi di immagine

File il cui tipo MIME è image contengono dati di immagini. Il sottotipo specifica quale formato specifico di file immagine i dati rappresentano. Solo alcuni tipi di immagine sono utilizzati abbastanza comunemente da essere considerati sicuri per l'uso nelle pagine Web:

Abbreviazione Formato del file Tipo MIME Estensione(i) del file Compatibilità con il browser
APNG Grafica di rete portatile animata image/apng .apng Chrome, Edge, Firefox, Opera, Safari
BMP File bitmap image/bmp .bmp Chrome, Edge, Firefox, Internet Explorer, Opera, Safari
GIF Formato di interscambio grafico image/gif .gif Chrome, Edge, Firefox, Internet Explorer, Opera, Safari
ICO Icona Microsoft image/x-icon .ico, .cur Chrome, Edge, Firefox, Internet Explorer, Opera, Safari
JPEG Immagine del Gruppo misto di esperti fotografici image/jpeg .jpg, .jpeg, .jfif, .pjpeg, .pjp Chrome, Edge, Firefox, Internet Explorer, Opera, Safari
PNG Rete grafica portatile image/png .png Chrome, Edge, Firefox, Internet Explorer, Opera, Safari
SVG Grafica vettoriale scalabile image/svg+xml .svg Chrome, Edge, Firefox, Internet Explorer, Opera, Safari
TIFF Formato di file immagine con tag image/tiff .tif, .tiff Nessuno integrato; sono necessari componenti aggiuntivi
WebP Formato immagine Web image/webp .webp Chrome, Edge, Firefox, Opera

L'abbreviazione di ciascun formato rimanda a una descrizione più approfondita del formato, delle sue funzionalità e delle informazioni dettagliate sulla compatibilità dei browser, comprese le versioni che hanno introdotto il supporto e le caratteristiche speciali specifiche che potrebbero essere state introdotte successivamente.

Tipi di audio e video

Come nel caso delle immagini, l'HTML non impone ai browser web il supporto di specifici tipi di file e codec per i file audio e video. e quindi è importante considerare il pubblico a cui ci si rivolge e la gamma di browser (e le versioni di tali browser) che potrebbero utilizzare quando si sceglie il tipo di file e i codec da utilizzare per i media.

Il nostro guida ai formati dei contenitori multimediali fornisce un elenco dei tipi di file comunemente supportati dai browser web, comprese le informazioni sui casi d'uso speciali, gli eventuali svantaggi e le informazioni sulla compatibilità, oltre ad altri dettagli.

Il codec audio e codec video Le guide elencano i vari codec che i browser web spesso supportano, fornendo dettagli sulla compatibilità e informazioni tecniche come il numero di canali audio supportati, il tipo di compressione utilizzata, la velocità di trasmissione e così via. Il utilizzati da WebRTC si estende a tutto questo coprendo specificamente i codec supportati dai principali browser web, in modo da poter scegliere i codec che meglio coprono la gamma di browser che si desidera supportare.

Per quanto riguarda i tipi MIME dei file audio o video, essi specificano tipicamente il formato del contenitore (tipo di file). L'opzione codecs può essere aggiunto al tipo MIME per specificare ulteriormente quali codec utilizzare e quali opzioni sono state usate per codificare i media, come il profilo del codec, il livello o altre informazioni simili.

Di seguito sono elencati i tipi MIME più comunemente utilizzati per i contenuti web. Tuttavia, questo non è un elenco completo di tutti i tipi disponibili. Vedere la sezione formati dei contenitori multimediali per questo.

Tipo MIME Tipo audio o video
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav
Un file audio nel formato contenitore WAVE. Il codec audio PCM (WAVE codec "1") è spesso supportato, ma altri codec hanno un supporto limitato (se presente).
audio/webm Un file audio nel formato contenitore WebM. Vorbis e Opus sono i codec ufficialmente supportati dalla specifica WebM.
video/webm Un file video, eventualmente con audio, nel formato contenitore WebM. VP8 e VP9 sono i codec video più comuni; Vorbis e Opus i codec audio più comuni.
audio/ogg Un file audio nel formato contenitore Ogg. Vorbis è il codec audio più comunemente usato in questo tipo di contenitore; tuttavia, anche Opus è ora supportato da Ogg.
video/ogg Un file video, eventualmente con audio, nel formato contenitore Ogg. Theora è il codec video solitamente utilizzato al suo interno; Vorbis è il codec audio abituale, anche se Opus sta diventando sempre più comune.
application/ogg Un file audio o video che utilizza il formato contenitore Ogg. Theora è il codec video solitamente utilizzato; Vorbis è il codec audio abituale.

multipart/form-data

Il multipart/form-data può essere utilizzato quando si inviano i valori di un file Modulo HTML dal browser al server.

Essendo un formato di documento multiparte, è costituito da diverse parti, delimitate da un confine (una stringa che inizia con un doppio trattino --). Ogni parte è un'entità a sé stante con le proprie intestazioni HTTP, Content-Dispositione Content-Type per i campi di caricamento dei file.

Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)

--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"

(data)
--aBoundaryString
(more subparts)
--aBoundaryString--

Il seguente

:

<formaction="http://localhost:8000/"method="post"enctype="multipart/form-data"><label>Name: <inputname="myTextField"value="Test">label><label><inputtype="checkbox"name="myCheckBox"> Checklabel><label>Upload file: <inputtype="file"name="myFile"value="test.txt">label><button>Send the filebutton>form>

invierà questo messaggio:

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465

-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"

Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"

on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plain

Simple file.
-----------------------------8721656041911415653955004498--

multipart/byteranges

Il multipart/byteranges è usato per inviare risposte parziali al browser.

Quando il tipo 206 Partial Content questo tipo MIME indica che il documento è composto da più parti, una per ogni intervallo richiesto. Come altri tipi multipart, il codice di stato Content-Type utilizza un codice di stato boundary per separare le parti. Ogni pezzo ha un Content-Type con il suo tipo effettivo e un Content-Range dell'intervallo che rappresenta.

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 385

--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-200/1270

eta http-equiv="Content-type" content="text/html; charset=utf-8" />
    

Importanza di impostare il tipo MIME corretto

La maggior parte dei server web invia risorse non riconosciute come il tipo application/octet-stream Tipo MIME. Per motivi di sicurezza, la maggior parte dei browser non consente di impostare un'azione predefinita personalizzata per tali risorse, costringendo l'utente a salvarle su disco per poterle utilizzare.

Alcune comuni configurazioni errate del server:

  • File compressi in RAR. In questo caso, l'ideale sarebbe il vero tipo di file originale; ciò è spesso impossibile, poiché i file .RAR possono contenere diverse risorse di tipo diverso. In questo caso, configurare il server in modo che invii application/x-rar-compressed.

  • Audio e video. Solo le risorse con il tipo MIME corretto saranno riprodotte in o . Assicurarsi di specificare l'elemento corretto per l'audio e il video..

  • Tipi di file proprietari. Evitare di usare application/octet-stream poiché la maggior parte dei browser non consente di definire un comportamento predefinito (come "Apri in Word") per questo tipo MIME generico. Un tipo specifico come application/vnd.mspowerpoint consente agli utenti di aprire automaticamente tali file nel software di presentazione di loro scelta.

Sniffing MIME

In assenza di un tipo MIME, o in alcuni casi in cui i browser ritengono che non siano corretti, i browser possono eseguire sniffing MIME - indovinando il tipo MIME corretto osservando i byte della risorsa.

Ogni browser esegue lo sniffing MIME in modo diverso e in circostanze diverse. (Ad esempio, Safari guarderà l'estensione del file nell'URL se il tipo MIME inviato non è adatto). Esistono problemi di sicurezza in quanto alcuni tipi MIME rappresentano contenuti eseguibili. I server possono impedire lo sniffing dei MIME inviando l'opzione X-Content-Type-Options .

Altri metodi di trasmissione del tipo di documento

I tipi MIME non sono l'unico modo per trasmettere informazioni sul tipo di documento:

  • A volte si utilizzano i suffissi dei nomi di file, soprattutto in Microsoft Windows. Non tutti i sistemi operativi considerano questi suffissi significativi (come Linux e MacOS) e non è garantito che siano corretti.
  • Numeri magici. La sintassi di diversi formati consente di dedurre il tipo di file osservando la struttura dei byte. Ad esempio, i file GIF iniziano con il simbolo 47 49 46 38 39 esadecimale (GIF89) e i file PNG con 89 50 4E 47 (.PNG). Non tutti i tipi di file hanno numeri magici, quindi anche questo non è affidabile al 100%.

Vedere anche

© 2005-2020 Mozilla e singoli collaboratori.
Con licenza Creative Commons Attribuzione-Condividi allo stesso modo v2.5 o successiva.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_Types