Quelles sont toutes les valeurs possibles pour l'en-tête HTTP "Content-Type"?


270

Je dois valider la Content-Typevaleur d'en-tête avant de la transmettre à une requête HTTP.

Existe-t-il une liste spécifique pour toutes les valeurs possibles de Content-Type?

Sinon, existe-t-il un moyen de valider le type de contenu avant de l'utiliser dans une requête HTTP?


9
Les types de médias valides sont censés être enregistrés auprès de l'IANA - vous pouvez voir une liste actuelle ici: iana.org/assignments/media-types/media-types.xhtml mais notez que cette liste peut être mise à jour au fil du temps. Il n'y a pas de liste fixe autorisée.
Joe


@Joe: "Les types de médias valides sont censés être enregistrés auprès de l'IANA" - attendez, cela signifie-t-il que les types de médias personnalisés (uniquement pour une utilisation dans une API Web spécifique à l'application qui ne sera appelée que par une application cliente personnalisée) sont pas autorisé du tout?
OR Mapper

1
@ORMapper je le lirais plus comme "il y a une liste officielle, mais je ne serais pas surpris d'en voir beaucoup d'autres à l'état sauvage". En ce qui concerne la question du PO, si vous vouliez essayer de valider "tous les types", vous voudriez au moins valider tous les types enregistrés. Que faire avec les autres est plus illimité. Pour autant que je sache, il n'est pas nécessaire d'enregistrer les types personnalisés.
Joe

Veuillez accepter la réponse qui vous a le plus aidé à résoudre votre problème. Il aide les futurs lecteurs. Si les réponses n'ont pas été utiles, laissez des commentaires en dessous. L'affiche peut donc les mettre à jour en conséquence. Lire Que dois-je faire lorsque quelqu'un répond à ma question? en savoir plus.
Roshana Pitigala

Réponses:


256

Vous pouvez trouver tous les types de contenu ici: http://www.iana.org/assignments/media-types/media-types.xhtml

Les types les plus courants sont:

  1. Type d'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. Type audio

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Tapez l'image

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

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. Saisissez du texte

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Tapez la vidéo

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Tapez 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

Comme défini dans la RFC 1341 :

Dans la notation BNF étendue de RFC 822, une valeur de champ d'en-tête Content-Type est définie comme suit:

Type de contenu: = tapez "/" sous-type * [";" paramètre]

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

x-token: = <Les deux caractères "X-" suivis, sans espace blanc intermédiaire, par aucun jeton>

sous-type: = jeton

paramètre: = attribut "=" valeur

attribut: = jeton

valeur: = token / quoted-string

jeton: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Doit être dans / "," / ";" / ":" / "\" / <">; chaîne entre guillemets, /" / "/" ["/"] "/"? "/". "; à utiliser dans /" = "; valeurs de paramètre

Et une liste des types MIME connus qui peuvent le suivre (ou, comme le remarque Joe, la source IANA ).

Comme vous pouvez le voir, la liste est beaucoup trop grande pour que vous puissiez la valider par rapport à tous. Ce que vous pouvez faire, c'est valider par rapport au format général et à l' typeattribut pour vous assurer qu'il est correct (l'ensemble des options est petit) et supposer simplement que ce qui suit est correct (et bien sûr intercepter toutes les exceptions que vous pourriez rencontrer lorsque vous le mettez à une utilisation réelle).

Notez également le commentaire ci-dessus:

Si un autre type principal doit être utilisé pour une raison quelconque, il faut lui attribuer un nom commençant par "X-" pour indiquer son statut non standard et éviter tout conflit potentiel avec un futur nom officiel.

Vous remarquerez que de nombreuses requêtes / réponses HTTP incluent un en- X-tête d'une sorte qui est auto-défini, gardez cela à l'esprit lors de la validation des types.


La RFC 1341 n'est pas pertinente pour HTTP.
Julian Reschke

2
La RFC 1341 décrit les en-têtes Content-Type qui sont utilisés dans HTTP. Comment diriez-vous exactement qu'ils ne sont pas liés?
Jeroen Vannevel

2
Il a été obsolète et remplacé plusieurs fois par des documents plus récents. Ce qui est pertinent, c'est ce que < greenbytes.de/tech/webdav/… > (plus les documents référencés) ont à dire.
Julian Reschke

3

Je viserais à couvrir un sous-ensemble de valeurs "Content-type" possibles, votre question semble se concentrer sur l'identification des types de contenu connus.

@Jeroen RFC 1341 référence est grande, mais pour une liste assez exhaustive IANA maintient une page web de types de médias officiellement enregistrés ici .


Ce ne sont pas des médiatypes "connus" (c'est-à-dire des échantillons de ce qui a été observé "dans la nature") mais des médiatypes qui sont passés par les procédures d'enregistrement IANA. Ils sont donc officiellement enregistrés.
J'ai

0

Si vous utilisez jaxrs ou tout autre, il y aura une classe appelée mediatype.User interceptor avant d'envoyer la demande et comparez-la.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.