Je dois valider l'en-tête Content-Type
avant de le transmettre à la 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?
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:
Application type
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
Type audio
audio/mpeg
audio/x-ms-wma
audio/vnd.rn-realaudio
audio/x-wav
Type d'image
image/gif
image/jpeg
image/png
image/tiff
image/vnd.Microsoft.icon
image/x-icon
image/vnd.djvu
image/svg+xml
Type multipart
multipart/mixed
multipart/alternative
multipart/related (using by MHTML (HTML mail).)
multipart/form-data
Tapez le texte
text/css
text/csv
text/html
text/javascript (obsolete)
text/plain
text/xml
Type vidéo
video/mpeg
video/mp4
video/quicktime
video/x-ms-wmv
video/x-msvideo
video/x-flv
video/webm
Type vnd:
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
Comme est défini dans RFC 1341 :
Dans la notation BNF étendue de la RFC 822, une valeur de champ d’en-tête Content-Type est définie comme suit:
Content-Type: = type "/" sous-type * [";" paramètre]
type: = "application"/"audio"/"image"/"message"/"multipart"/"texte"/"vidéo"/x-jeton
jeton x: = <Les deux caractères "X-" suivis, sans espace blanc, par aucun jeton>
sous-type: = jeton
paramètre: = attribut "=" valeur
attribut: = jeton
valeur: = jeton/chaîne citée
jeton: = 1 *
tspecials: = "("/")"/"<"/">"/"@"; Doit être dans/","/";"/":"/"\"/<">; chaîne entre guillemets, /"/"/" ["/"] "/"? "/". "; à utiliser dans /" = "; valeurs de paramètre
Et ne liste de types MIME connus qui peuvent la suivre (ou, comme le remarque Joe, la source IANA ).
Comme vous pouvez le constater, la liste est bien trop longue pour que vous puissiez la valider. Ce que vous pouvez faire est de valider par rapport au format général et à l’attribut type
pour vous assurer qu’il est correct (le jeu d’options est petit) et supposez simplement que ce qui suit est correct (et, bien sûr, capturer les exceptions rencontre lorsque vous l’utilisez pour un usage réel).
Notez également le commentaire ci-dessus:
Si un autre type principal doit être utilisé pour une raison quelconque, vous devez lui attribuer un nom commençant par "X-" afin d'indiquer son statut non standard et d'éviter tout conflit potentiel avec un nom officiel futur.
Vous remarquerez que beaucoup de requêtes/réponses HTTP incluent un en-tête de type X-
défini par l'utilisateur, gardez cela à l'esprit. lors de la validation des types.
Je voudrais couvrir un sous-ensemble de valeurs possibles de "type de contenu", votre question semble se concentrer sur l'identification des types de contenu connus.
La référence @Jeroen RFC 1341 est excellente, mais pour une liste assez exhaustive, l'IANA conserve une page Web des types de supports officiellement enregistrés ici .
Si vous utilisez jaxrs ou un autre, il y aura une classe appelée intercepteur mediatype.User avant d'envoyer la demande et de la comparer à celle-ci.