Quali sono tutti i possibili valori per l'intestazione HTTP "Content-Type"?


270

Devo convalidare il Content-Typevalore dell'intestazione prima di passarlo a una richiesta HTTP.

Esiste un elenco specifico per tutti i possibili valori di Content-Type?

Altrimenti, c'è un modo per convalidare il tipo di contenuto prima di usarlo in una richiesta HTTP?


9
Si suppone che i tipi di media validi siano registrati con IANA - puoi vedere un elenco corrente qui: iana.org/assignments/media-types/media-types.xhtml ma nota che questo elenco può aggiornarsi nel tempo. Non esiste un elenco consentito fisso.
Joe,


@Joe: "I tipi di media validi devono essere registrati con IANA" - aspetta, questo significa che i tipi di media personalizzati (solo per l'uso in un'API Web specifica dell'applicazione che verrà chiamata solo da un'applicazione client personalizzata) sono non è permesso affatto?
OR Mapper,

1
@ORMapper lo leggerei più come "esiste un elenco ufficiale, ma non sarei sorpreso di vedere molti altri in libertà". In termini di domanda del PO, se avessi tentato di convalidare "tutti i tipi", avresti almeno voluto convalidare tutti i tipi registrati. Cosa fare con quelli aggiuntivi è più aperto. Per quanto ne so, non è necessario registrare tipi personalizzati.
Joe,

Accetta la risposta che ti ha aiutato di più a risolvere il tuo problema. Aiuta i futuri lettori. Se le risposte non sono state utili, lasciare dei commenti sotto di loro. Quindi il poster può aggiornarli di conseguenza. Leggi Cosa devo fare quando qualcuno risponde alla mia domanda? per saperne di più
Roshana Pitigala,

Risposte:


256

Puoi trovare tutti i tipi di contenuto qui: http://www.iana.org/assignments/media-types/media-types.xhtml

I tipi più comuni sono:

  1. Digitare application

    application/java-archive
    application/EDI-X12   
    application/EDIFACT   
    application/javascript   
    application/octet-stream   
    application/ogg   
    application/pdf  
    application/xhtml+xml   
    application/x-shockwave-flash    
    application/json  
    application/ld+json  
    application/xml   
    application/zip  
    application/x-www-form-urlencoded  
    
  2. Digita audio

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Digita immagine

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. Digitare multipart

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. Digita il testo

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Digita video

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Digita vnd:

    application/vnd.android.package-archive
    application/vnd.oasis.opendocument.text    
    application/vnd.oasis.opendocument.spreadsheet  
    application/vnd.oasis.opendocument.presentation   
    application/vnd.oasis.opendocument.graphics   
    application/vnd.ms-excel    
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet   
    application/vnd.ms-powerpoint    
    application/vnd.openxmlformats-officedocument.presentationml.presentation    
    application/msword   
    application/vnd.openxmlformats-officedocument.wordprocessingml.document   
    application/vnd.mozilla.xul+xml   
    

51

Come definito in RFC 1341 :

Nella notazione BNF estesa di RFC 822, un valore del campo di intestazione Content-Type è definito come segue:

Content-Type: = type "/" sottotipo * [";" parametro]

type: = "application" / "audio" / "image" / "message" / "multipart" / "text" / "video" / x-token

x-token: = <I due caratteri "X-" seguiti, senza spazi bianchi, da qualsiasi token>

sottotipo: = token

parametro: = attributo "=" valore

attributo: = token

valore: = token / stringa tra virgolette

token: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Deve essere in / "," / ";" / ":" / "\" / <">; quoted-string, /" / "/" ["/"] "/"? "/". "; utilizzare entro /" = "; valori dei parametri

E un elenco di tipi MIME noti che possono seguirlo (o, come osserva Joe, la fonte IANA ).

Come puoi vedere, l'elenco è troppo grande per essere convalidato da tutti. Quello che puoi fare è validare rispetto al formato generale e typeall'attributo per assicurarti che sia corretto (l'insieme di opzioni è piccolo) e supponi solo che ciò che segue sia corretto (e ovviamente cogli eventuali eccezioni che potresti incontrare quando lo metti all'uso reale).

Nota anche il commento sopra:

Se un altro tipo primario deve essere utilizzato per qualsiasi motivo, deve essere assegnato un nome che inizia con "X-" per indicare il suo stato non standard ed evitare qualsiasi potenziale conflitto con un futuro nome ufficiale.

Noterai che molte richieste / risposte HTTP includono X-un'intestazione di qualche tipo che sono auto-definite, tienilo a mente quando convalidi i tipi.


RFC 1341 non è rilevante per HTTP.
Julian Reschke,

2
RFC 1341 descrive le intestazioni Content-Type utilizzate in HTTP. Come diresti esattamente che non sono collegati?
Jeroen Vannevel,

2
È stato obsoleto e sostituito più volte da documenti più recenti. Ciò che è rilevante è ciò che < greenbytes.de/tech/webdav/… > (oltre ai documenti di riferimento) hanno da dire.
Julian Reschke,

3

Vorrei mirare a coprire un sottoinsieme di possibili valori di "tipo di contenuto", la domanda sembra concentrarsi sull'identificazione dei tipi di contenuto conosciuti.

La referenza di @Jeroen RFC 1341 è ottima, ma per un elenco abbastanza esaustivo IANA mantiene una pagina web di tipi di media ufficialmente registrati qui .


Non si tratta di mediatype "noti" (ovvero campioni di ciò che è stato osservato "in natura") ma di mediatypes sottoposti alle procedure di registrazione IANA. Sono quindi ufficialmente registrati. È stato importante evidenziarlo :)
DaSourcerer,

0

Se stai usando jaxrs o qualsiasi altro, allora ci sarà una classe chiamata mediatype.Interceptor utente prima di inviare la richiesta e confrontarla con questa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.