Internet media type

An Internet media type[1] is a standard identifier used on the Internet to indicate the type of data that a file contains. Common uses include the following:

A media type is composed of a type, a subtype, and zero or more optional parameters. As an example, an HTML file might be designated text/html; charset=UTF-8. In this example text is the type, html is the subtype, and charset=UTF-8 is an optional parameter indicating the character encoding.

IANA manages the official registry of media types.

The identifiers were originally defined in RFC 2046, and were called MIME types because they referred to the non-ASCII parts of email messages that were composed using the MIME (Multipurpose Internet Mail Extensions) specification. They are also sometimes referred to as Content-types.

Their use has expanded from email sent through SMTP, to other protocols such as HTTP, RTP and SIP.

New media types can be created with the procedures outlined in RFC 6838.

Limitations

Internet media types are often used as part of a communication protocol between two applications (the source and destination). In this context, internet media type specifiers experience several problems.

The first problem is the ability of the source application (i.e. web server, email client) to correctly determine an internet media type for a piece of content. Many applications attempt to heuristically classify a file using its filename extension or with magic numbers. Neither approach is perfect, and may incorrectly classify a content's media type:

The second problem is the destination application's ability to trust the internet media type reported by the sender. As above, the internet media type is incorrect in some circumstances, and must be treated with skepticism. As early as 2002, the W3C unambiguously warned that it is a "serious error" if internet media type is incorrect, and that software should not attempt to guess a correct media type.[1]:Section 2 Nonetheless, software engineering principles encourage software that forgives a certain degree of malformed input, and user experience suffers when software fails to correctly interpret the content. Consequently, the many destination applications are designed to attempt recovery from such errors and identify a correct media type.[2][3]

The destination application has no more knowledge of the content than the source application, and attempts to infer the media type at the destination are equally difficult. This can lead to incompatibilities between source and destination applications, and in the worst-case, security vulnerabilities such as the Gifar attack or Cross-site scripting attacks.[4][5] Advanced content sniffing approaches have been proposed to balance interoperability and security in such situations.[3]

Naming

Media type consists of top-level type name and subtype name, which is further structured into so-called "trees". Media types can optionally define companion data, known as parameters.

top-level type name / subtype name [ ; parameters ]

top-level type name / [ tree. ] subtype name [ +suffix ] [ ; parameters ]

The currently registered top-level type names are: application, audio, example, image, message, model, multipart, text, video.

Subtype name typically consists of a media type name, but it may or must also contain other content, such as tree prefix (facet), producer's name, product name or suffix - according the different rules in registration trees.

Examples: "image/svg+xml", "application/vnd.oasis.opendocument.text", "text/plain; charset=utf-8", "video/mp4; codecs="avc1.640028""[6]

Registration trees

All media types should be registered using the IANA registration procedures. For the efficiency and flexibility of the media type registration process, different structures of subtype names can be registered in registration "trees" that are distinguished by the use of faceted names, e.g. subtype names that begin with a "tree." prefix (facet). Currently the following trees are created: standard, vendor, personal or vanity, unregistered "x.". These registration trees were first defined in November 1996 (obsoleted RFC 2048 - currently RFC 6838). New registration trees may be created by IETF Standards Action - for external registration and management by well-known permanent organizations (e.g. scientific societies).

Standards tree

Media types in the standards tree do not use any tree facet (prefix).

Registrations in the standards tree must be either associated with IETF specifications approved directly by the IESG, or registered by an IANA-recognized standards-related organization.

type / media type name [+suffix]

Examples: "application/xhtml+xml", "image/png"

Vendor tree

Vendor tree is used for media types associated with publicly available products. It uses "vnd." facet.

The terms "vendor" and "producer" are considered equivalent in the context. Industry consortia as well as non-commercial entities can register media types in the vendor tree. A registration in the vendor tree may be created by anyone who needs to interchange files associated with some software product or set of products. However, the registration belongs to the vendor or organization producing the software that employs the type being registered, and that vendor or organization can at any time elect to assert ownership of a registration done by a third party.

type / vnd. media type name [+suffix] - used in the case of well-known producer

type / vnd. producer's name followed by media type name [+suffix] - producer's name must be approved by IANA

type / vnd. producer's name followed by product's name [+suffix] - producer's name must be approved by IANA

Examples: "application/vnd.ms-excel", "application/vnd.oasis.opendocument.text" for OASIS OpenDocument Text, "application/vnd.etsi.asic-s+zip" for ETSI ASiC

Personal or Vanity tree

Personal or Vanity tree includes media types created experimentally or as part of products that are not distributed commercially. It uses "prs." facet.

type / prs. media type name [+suffix]

Unregistered x. tree

The "x." tree may be used for media types intended exclusively for use in private, local environments and only with the active agreement of the parties exchanging them. Types in this tree cannot be registered.

According to RFC 6838 (published in January 2013), any use of types in the "x." tree is strongly discouraged. Media types with names beginning with "x-" are no longer considered to be members of this tree since January 2013.

According to the previous version of RFC 6838 - obsoleted RFC 2048 (published in November 1996) it should rarely, if ever, be necessary to use unregistered experimental types, and as such use of both "x-" and "x." forms is discouraged. Previous versions of that RFC - RFC 1590 and RFC 1521 stated that the use of "x-" notation for the subtype name may be used for unregistered and private subtypes, but this recommendation was obsoleted in November 1996.

All media types should be registered using the simplified IANA registration procedures for vendor and personal trees or using the standards procedure for standards tree.

Media types that have been widely deployed (with an unfaceted subtype name beginning with the "x-" prefix) without being registered, should be, if possible, reregistered with a proper faceted subtype name. If this is not possible, the media type can, after an approval by both the media types reviewer and the IESG, be registered in the proper tree with its unfaceted name.

type / x. media type name [+suffix]

Suffix

Suffix is an augmentation to the media type definition to additionally specify the underlying structure of that media type. Media types that make use of a named structured syntax should use the appropriate IANA-registered "+suffix" for that structured syntax when they are registered. Unregistered suffixes should not be used (since January 2013). Structured syntax suffix registration procedures are defined in RFC 6838.

The currently registered suffixes are: (in RFC 6839) +xml, +json, +ber, +der, +fastinfoset, +wbxml, +zip, (in RFC 7049) +cbor[7]

"+xml" suffix is defined since January 2001 (RFC 3023). Formal registration of "+xml" suffix and other suffixes is defined since January 2013 (RFC 6839).

List of common media types

IANA manages the official registry of media types. Among others, it includes the following types:

Type application

For Multipurpose files:

For Multimedia files:

Type audio

For Audio.

Type example

For example types in documentation, not for real code.

Type image

Type message

Type model

For 3D models.

Type multipart

For archives and other objects made of more than one part.

Type text

For human-readable text and source code.

Type video

For video.

List of common media subtype prefixes

Prefix vnd

For vendor-specific files.

Prefix x

For experimental or non-standard files. Deprecated by RFC 6648.[27]

See also

References

  1. 1.0 1.1 "Internet Media Type registration, consistency of use". W3C. 2002-09-04. Retrieved 2012-02-29.
  2. "MIME Type Detection in Windows Internet Explorer". Microsoft. Retrieved 2012-07-14.
  3. 3.0 3.1 Gordon P. Hemsley, Adam Barth, Ian Hickson (29 November 2012). "MIME Sniffing Standard, Living Standard". Mimesniff.spec.whatwg.org. Retrieved 2013-08-16.
  4. "CVE-2008-5343 (under review)". MITRE Corporation. 4 December 2008. Retrieved 1 January 2013.
  5. Henry Sudhof (11 February 2009). "Risky sniffing: MIME sniffing in Internet Explorer enables cross-site scripting attacks". The H. Retrieved 2012-07-14.
  6. The 'Codecs' and 'Profiles' Parameters for "Bucket" Media Types, 2011-08 Check date values in: |date= (help)
  7. Structured Syntax Suffix Registry, 2012-07-20
  8. "Embedding Dart in HTML". Dartlang.org. Retrieved 2013-12-03.
  9. RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media types. Tools.ietf.org. Retrieved on 2010-09-29.
  10. "RFC 7231: 3.1.1.5. Content-Type". HTTP/1.1 Semantics and Content. The Internet Society. June 2014. Retrieved 2014-07-31.
  11. MIME SUBTYPE NAME: zip
  12. "Supported Media Formats". RealPlayer Help. RealNetworks. 2010. Retrieved 28 May 2012.
  13. MIME SUBTYPE NAME: png
  14. the premier menu for djvu resources. DjVu.org. Retrieved on 2015-02-12.
  15. vnd.a
  16. 16.0 16.1 vnd.abc
  17. Mime Types List
  18. Quicktime
  19. vnd.debian.binary-package
  20. vnd.oasis.opendocument.text
  21. vnd.oasis.opendocument.spreadsheet
  22. vnd.oasis.opendocument.presentation
  23. vnd.oasis.opendocument.graphics
  24. "Application Media Types". IANA. Retrieved 2012-02-19.
  25. "KML Tutorial - Keyhole Markup Language — Google Developers". Developers.google.com. Retrieved 2013-08-16.
  26. "MIME Type". Social.msdn.microsoft.com. Retrieved 2013-08-16.
  27. "RFC 6648 - Deprecating the "X-" Prefix and Similar Constructs in Application Protocols". IETF. June 2012. Retrieved 2012-10-07.
  28. Hosting - Google Chrome. Developer.chrome.com (2013-08-02). Retrieved on 2015-02-12.

External links