2014-05-17 2 views
77

Je dois valider la valeur d'en-tête Content-Type avant de la transmettre à la requête HTTP.Quelles sont toutes les valeurs possibles pour l'en-tête HTTP "Content-Type"?

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?

+5

types de média valide sont censés être enregistré auprès de l'IANA - vous pouvez voir une liste à jour ici: http: //www.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 autorisée. – Joe

Répondre

30

Comme is defined dans RFC 1341:

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

Content-Type: = Type "/" sous-type * [";" paramètre]

Type: = "application"/"audio" /"image"/"message" /"multipart"/"texte" /"vidéo"/x-token

x-token : = < Les deux caractères "X-" suivi, sans intervention espace blanc, par un jeton>

sous-type

: = jeton

paramètre

: = attribut "=" valeur

attribut: = jeton

valeur: = jeton/cité-string

jeton: = 1 *

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

et a list of known MIME types qui peut le suivre (ou, comme le remarque Joe, the IANA source).

comme vous pouvez voir la liste est trop grand pour que vous validiez contre tous. ce que vous pouvez faire est validez par rapport au format général et à l'attribut type pour vous assurer que c'est correct (l'ensemble d'options est petit) et supposez juste que ce qui suit est correct (et bien sûr attrapez toutes les exceptions que vous pourriez rencontrer quand vous l'utiliserez)

Notez également le commentaire ci-dessus:

Si un autre type primaire doit être utilisé pour une raison quelconque, il faut donner 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 beaucoup de demandes/réponses HTTP incluent un en-tête X- d'une sorte qui sont auto définies, gardez cela à l'esprit lors de la validation des types.

+0

La RFC 1341 n'est pas pertinente pour HTTP. –

+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? –

+2

Il a été obsolète et remplacé par de nouveaux documents plusieurs fois. Ce qui est pertinent est ce que (plus les documents référencés) ont à dire. –

0

Si vous utilisez jaxrs ou tout autre, il y aura une classe appelée intercepteur mediatype.User avant d'envoyer la requête et de la comparer à celle-ci.

1

Je voudrais viser à couvrir un sous-ensemble de valeurs possibles "Content-type", vous 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 conserve une page Web de types de supports officiellement enregistrés here.

+0

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 ont subi les procédures d'enregistrement de l'IANA. Ils sont donc officiellement enregistrés. A trouvé important de le signaler :) – DaSourcerer

39

L'tête Content-Type dans une requête HTTP ou réponse décrit le contenu

Type

pour le corps du message. L'Accepter en-tête dans la demande indique au serveur les types de contenu

que le client attend dans le corps de la réponse. Les types de contenu sont

représenté en utilisant le type de média Internet. Le type de média Internet (également connu sous le nom

le type MIME) indique le type de données qu'un fichier contient. Voici un exemple:

     Content-Type: text/html 

Cet en-tête indique que le contenu du corps est présenté au format html. Le

le format

des valeurs de type de contenu est un type primaire/sous-type suivie d'une option

virgule paires délimité attribut-valeur (appelés paramètres).

Les types de médias Internet sont généralement classés dans les catégories suivantes sur la base du primaire (ou initiale) Content-Type tête:

  • texte: Ce type indique que le contenu est texte clair et aucun logiciel spécial n'est requis pour lire le contenu. Le sous-type représente des détails plus spécifiques sur le contenu, qui peuvent être utilisés par le client pour un traitement spécial, le cas échéant. Par exemple, Type de contenu:text/html indique que le contenu du corps est html et que le client peut utiliser cette indication pour lancer le moteur de rendu tout en affichant la réponse.
  • multipart: Comme son nom l'indique, ce type comprend plusieurs parties des types de données indépendants. Par exemple, Type de contenu:multipart/form-data est utilisé pour l'envoi de formulaires contenant les fichiers, les données non-ASCII et les données binaires.
  • message: Ce type encapsule plus de messages. Il permet aux messages de contenir d'autres messages ou des pointeurs vers d'autres messages. Par exemple, le type de contenu Content-Type: /partiel permet de diviser les messages volumineux en messages plus petits. Le message complet peut alors être lu par le client (agent utilisateur) en mettant tous les messages brisés ensemble.
  • image: Ce type représente les données d'image. Par exemple, Type de contenu:image/png indique que le contenu du corps est une image .png.
  • audio: Ce type indique les données audio. Par exemple, Type de contenu:audio/mpeg indique que le contenu du corps est MP3 ou autre audio MPEG.
  • vidéo: Ce type indique les données vidéo. Par exemple Type de contenu:, vidéo/mp4 indique que le contenu du corps est vidéo MP4.
  • application: Ce type représente les données d'application ou les données binaires. Par exemple, Type de contenu: application/json; charset = utf-8 indique que le contenu doit être dans le format JavaScript Object Notation (JSON), codé avec un codage de caractères UTF-8.

Pour consulter la liste complète, visitez le site Web de Internet Assigned Numbers Authority (IANA) à Media Types

-4

Mettez ce code pour obtenir "Type de contenu" lors de l'exécution:

vb. net:

dim ContentType = Web.MimeMapping.GetMimeMapping("c:\MyArchive.zip") 

Ou

dim ContentType = Web.MimeMapping.GetMimeMapping(".zip") 
4

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

mais le type le plus commun sont:

  1. Type application

    demande

    /EDI-X12
    demande /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

  2. type audio

    audio/mpeg audio/
    x-ms-wma
    audio/vnd.rn-RealAudio
    audio/x-wav

  3. image type

    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 (en utilisant par MHTML (courrier HTML).)

  5. type texte

    text/css
    text/csv
    text/html
    text/javascript (obsolète)
    text/nature
    text/xml

  6. type vidéo

    vidéo/mpeg
    video/mp4
    vidéo/quicktime
    vidéo/x-ms-wmv
    video/x-msvideo
    vidéo/X- flv
    vidéo/WebM

  7. type de VND:

    demande

    /vnd.oasis.opendocument.text
    demande /vnd.oasis.opendocument.spreadsheet
    demande /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
    applicatio n/vnd.openxmlformats-officedocument.wordprocessingml.document
    application/xml vnd.mozilla.xul +

Questions connexes