Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are all the possible values for HTTP "Content-Type" header?

I have to validate the Content-Type header value before passing it to an HTTP request.

Is there a specific list for all the possible values of Content-Type?

Otherwise, is there a way to validate the content type before using it in an HTTP request?

like image 520
Awesome Avatar asked May 17 '14 17:05

Awesome


People also ask

What is the value of the Content-Type header?

In responses, a Content-Type header provides the client with the actual content type of the returned content. This header's value may be ignored, for example when browsers perform MIME sniffing; set the X-Content-Type-Options header value to nosniff to prevent this behavior.

What are HTTP header values?

HTTP headers are the name or value pairs that are displayed in the request and response messages of message headers for Hypertext Transfer Protocol (HTTP). Usually, the header name and the value are separated by a single colon. HTTP headers are an integral part of HTTP requests and responses.

How many types of HTTP headers are there?

There are four types of HTTP message headers: General-header: These header fields have general applicability for both request and response messages. Client Request-header: These header fields have applicability only for request messages.


2 Answers

You can find every content type here: http://www.iana.org/assignments/media-types/media-types.xhtml

The most common type are:

  1. Type 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. Type 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. Type text

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

    video/mpeg     video/mp4     video/quicktime     video/x-ms-wmv     video/x-msvideo     video/x-flv    video/webm    
  7. Type 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    
like image 95
lebarillier Avatar answered Sep 22 '22 18:09

lebarillier


As is defined in RFC 1341:

In the Extended BNF notation of RFC 822, a Content-Type header field value is defined as follows:

Content-Type := type "/" subtype *[";" parameter]

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

x-token := < The two characters "X-" followed, with no intervening white space, by any token >

subtype := token

parameter := attribute "=" value

attribute := token

value := token / quoted-string

token := 1*<any CHAR except SPACE, CTLs, or tspecials>

tspecials := "(" / ")" / "<" / ">" / "@" ; Must be in / "," / ";" / ":" / "" / <"> ; quoted-string, / "/" / "[" / "]" / "?" / "." ; to use within / "=" ; parameter values

And a list of known MIME types that can follow it (or, as Joe remarks, the IANA source).

As you can see the list is way too big for you to validate against all of them. What you can do is validate against the general format and the type attribute to make sure that is correct (the set of options is small) and just assume that what follows it is correct (and of course catch any exceptions you might encounter when you put it to actual use).

Also note the comment above:

If another primary type is to be used for any reason, it must be given a name starting with "X-" to indicate its non-standard status and to avoid any potential conflict with a future official name.

You'll notice that a lot of HTTP requests/responses include an X- header of some sort which are self defined, keep this in mind when validating the types.

like image 39
Jeroen Vannevel Avatar answered Sep 22 '22 18:09

Jeroen Vannevel