HTTP uses Internet Media Types [13] in the Content-Type header field
(Section 10.5) in order to provide open and extensible data typing.
media-type = type "/" subtype *( ";" parameter )
type = token
subtype = token
Parameters may follow the type/subtype in the form of attribute/value
pairs.
parameter = attribute "=" value
attribute = token
value = token | quoted-string
The type, subtype, and parameter attribute names are case-
insensitive. Parameter values may or may not be case-sensitive,
depending on the semantics of the parameter name. LWS must not be
generated between the type and subtype, nor between an attribute and
its value. Upon receipt of a media type with an unrecognized
parameter, a user agent should treat the media type as if the
unrecognized parameter and its value were not present.
Some older HTTP applications do not recognize media type parameters.
HTTP/1.0 applications should only use media type parameters when they
are necessary to define the content of a message.
Media-type values are registered with the Internet Assigned Number
Authority (IANA [15]). The media type registration process is
outlined in RFC 1590 [13]. Use of non-registered media types is
discouraged.