Типы MIME
Типы MIME (типы медиаданных IANA)
Тип медиаданных (также известный как тип MIME) указывает природу и формат документа, файла или набора байтов. Типы MIME определены и стандартизированы в RFC 6838 IETF.
За все официальные типы MIME отвечает IANA (Internet Assigned Numbers Authority), и вы можете найти самый актуальный и полный список на странице Типы медиаданных.
Предупреждение: Браузеры используют тип MIME, а не расширение файла, чтобы определить, как обработать URL-адрес, поэтому важно, чтобы веб-серверы отправляли правильный тип MIME в заголовке ответа Content-Type. Если это не настроено правильно, браузеры могут неправильно интерпретировать содержимое файлов, сайты не будут работать правильно, а загруженные файлы могут быть обработаны неправильно.
Структура типа MIME
Тип MIME чаще всего состоит из двух частей: типа и подтипа, разделенных косой чертой (/) — без пробелов между ними:
type/subtype
Тип представляет общую категорию, к которой относится тип данных, например, video или text.
Подтип определяет точный вид данных указанного типа, который представляет тип MIME. Например, для типа MIME text, подтип может быть plain (простой текст), html (исходный код HTML) или calendar (для файлов iCalendar/.ics).
Каждый тип имеет свой собственный набор возможных подтипов. Тип MIME всегда имеет и тип, и подтип, никогда не только один из них.
Можно добавить необязательный параметр для предоставления дополнительных деталей:
type/subtype;parameter=value
Например, для любого типа MIME, основной тип которого text, можно добавить необязательный параметр charset, чтобы указать кодировку символов, используемую для символов в данных. Если параметр charset не указан, по умолчанию используется ASCII (US-ASCII), если это не переопределено настройками пользователя агента. Для указания текстового файла UTF-8 используется тип MIME text/plain;charset=UTF-8.
Типы MIME нечувствительны к регистру, но традиционно записываются строчными буквами. Значения параметров могут быть чувствительны к регистру.
Типы
Существует два класса типов: дискретные и составные. Дискретные типы представляют один файл или носитель, например, один текстовый или музыкальный файл, или одно видео. Составной тип представляет документ, состоящий из нескольких составных частей, каждая из которых может иметь свой собственный тип MIME; или составной тип может содержать несколько файлов, отправленных вместе в одной транзакции. Например, составные типы MIME используются при прикреплении нескольких файлов к электронному письму.
Дискретные типы
Дискретные типы, зарегистрированные в IANA на данный момент:
application-
Любые двоичные данные, которые не относятся явно ни к одному из других типов; либо данные, которые будут выполнены или интерпретированы каким-либо образом, либо двоичные данные, требующие использования конкретного приложения или категории приложений. Обобщенные двоичные данные (или двоичные данные, истинный тип которых неизвестен) — это
application/octet-stream. Другие распространенные примеры включаютapplication/pdf,application/pkcs8, иapplication/zip. (Регистрация в IANA) audio-
Аудио- или музыкальные данные. Примеры включают
audio/mpeg,audio/vorbis. (Регистрация в IANA) example-
Зарезервировано для использования в качестве заглушки в примерах, показывающих, как использовать типы MIME. Их никогда не следует использовать за пределами примеров кода и документации.
exampleтакже может использоваться в качестве подтипа; например, в примере, связанном с работой с аудио в веб-приложении, тип MIMEaudio/exampleможет использоваться для обозначения того, что тип является заглушкой и должен быть заменён соответствующим значением при использовании кода в реальной ситуации. font-
Данные шрифтов/стилей. Общие примеры включают
font/woff,font/ttf, иfont/otf. (Регистрация в IANA) image-
Изображения или графические данные, включая как растровые, так и векторные статичные изображения, а также анимированные версии статичных форматов изображений, такие как анимированный GIF или APNG. Распространёнными примерами являются
image/jpeg,image/png, иimage/svg+xml. (Регистрация в IANA) model-
Данные модели для 3D-объекта или сцены. Примеры включают
model/3mfиmodel/vrml. (Регистрация в IANA) text-
Только текстовые данные, включая любой удобочитаемый контент, исходный код или текстовые данные, такие как данные в формате CSV. Примеры включают:
text/plain,text/csv, иtext/html. (Регистрация в IANA) video-
Видеоданные или файлы, такие как фильмы MP4 (
video/mp4). (Регистрация в IANA)
Для текстовых документов без конкретного подтипа следует использовать text/plain. Аналогично, для двоичных документов без конкретного или известного подтипа следует использовать application/octet-stream.
Составные типы
Составные типы указывают на категорию документа, разбитого на части, часто с различными типами MIME; они также могут использоваться — особенно в сценариях электронной почты — для представления нескольких отдельных файлов, которые все являются частью одной транзакции. Они представляют собой составной документ.
За исключением multipart/form-data, используемого в методе POST форм HTML, и multipart/byteranges, используемого с 206 Partial Content, для отправки части документа, HTTP не обрабатывает составные документы особым образом: сообщение передаётся браузеру (который, вероятно, покажет окно «Сохранить как», если он не знает, как отобразить документ).
Существует два составных типа:
message-
Сообщение, которое включает в себя другие сообщения. Это можно использовать, например, для представления электронного письма, содержащего переадресованное сообщение в качестве части данных, или для отправки очень больших сообщений частями так, как будто это несколько сообщений. Примеры включают
message/rfc822(для цитирования переадресованных или отвеченных сообщений) иmessage/partialдля автоматического разделения большого сообщения на меньшие для повторной сборки получателем. (Регистрация в IANA) multipart-
Данные, состоящие из нескольких компонентов, которые могут иметь разные типы MIME. Примеры включают
multipart/form-data(для данных, созданных с помощью APIFormData) иmultipart/byteranges(определённого в RFC 7233, раздел 5.4.1 и используемого с HTTP ответом206«Неполное содержимое», возвращаемым, когда полученные данные являются лишь частью содержимого, например, передаваемого с помощью заголовкаRange). (Регистрация в IANA)
Важные типы MIME для веб-разработчиков
application/octet-stream
Это значение по умолчанию для двоичных файлов. Поскольку это означает файл с неизвестными двоичными данными, браузеры обычно не выполняют его и даже не спрашивают, следует ли его выполнять. Они обрабатывают его так, как если бы заголовок Content-Disposition был установлен в значение attachment, и предлагают диалог «Сохранить как».
text/plain
Это значение по умолчанию для текстовых файлов. Даже если это действительно означает «неизвестный текстовый файл», браузеры предполагают, что они могут его отобразить.
Примечание: text/plain не означает «любые текстовые данные». Если они ожидают определённый вид текстовых данных, они, скорее всего, не сочтут это совпадением. В частности, если они загружают файл text/plain из элемента <link>, объявляющего файл CSS, они не распознают его как допустимый файл CSS, если ему будет представлен text/plain. Нужно использовать тип MIME CSS text/css.
text/css
Файлы CSS, используемые для стилизации веб-страницы, обязательно должны отправляться с типом text/css. Если сервер не распознает суффикс .css для файлов CSS, он может отправлять их с типами MIME text/plain или application/octet-stream. В таком случае большинство браузеров не распознают их как CSS и проигнорируют.
text/html
Весь контент HTML должен передаваться с этим типом. Альтернативные MIME-типы для XHTML (например, application/xhtml+xml) в наши дни в основном бесполезны.
Примечание: Используйте application/xml или application/xhtml+xml, если вы хотите использовать строгие правила разбора XML, <![CDATA[…]]> секции или элементы, которые не принадлежат пространствам имён HTML/SVG/MathML.
text/javascript
Согласно реестру IANA MIME типов IANA Media Types registry, спецификации RFC 9239 и спецификации HTML, контент JavaScript всегда должен передаваться с помощью MIME-типа text/javascript. Другие MIME-типы для JavaScript не считаются допустимыми, а использование любого MIME-типа, отличного от text/javascript, может привести к тому, что скрипты не загружатся или не будут выполняться.
Вы можете найти некоторые JavaScript-контент, неправильно переданные с параметром charset в рамках MIME-типа — в попытке указать кодировку символов для контента скрипта. Этот параметр charset недействителен для контента JavaScript и в большинстве случаев приведет к тому, что скрипт не загрузится.
Устаревшие MIME-типы JavaScript
Помимо MIME-типа text/javascript, по историческим причинам, стандарт анализа MIME MIME Sniffing Standard (определение того, как браузеры должны интерпретировать MIME-типы и определять, что делать с контентом, у которого нет допустимого) также позволяет передавать JavaScript с помощью следующих устаревших MIME-типов JavaScript:
-
application/javascriptУстаревший -
application/ecmascriptУстаревший -
application/x-ecmascriptНестандартный -
application/x-javascriptНестандартный -
text/ecmascriptУстаревший -
text/javascript1.0Нестандартный -
text/javascript1.1Нестандартный -
text/javascript1.2Нестандартный -
text/javascript1.3Нестандартный -
text/javascript1.4Нестандартный -
text/javascript1.5Нестандартный -
text/jscriptНестандартный -
text/livescriptНестандартный -
text/x-ecmascriptНестандартный -
text/x-javascriptНестандартный
Примечание: Несмотря на то, что любой конкретный агент пользователя может поддерживать все или некоторые из них, вы должны использовать только text/javascript. Это единственный MIME-тип, гарантированно работающий сейчас и в будущем.
Типы изображений
Файлы с MIME-типом image содержат данные изображения. Подтип указывает, какой конкретный формат файла изображения представляют данные.
Следующие типы изображений достаточно часто используются, чтобы считаться безопасными для использования на веб-страницах:
-
image/apng: Анимированные Portable Network Graphics (APNG) -
image/avif: Формат файлов изображений AV1 (AVIF) -
image/gif: Формат обмена графикой (GIF) -
image/jpeg: Изображение группы экспертов по фотографии (JPEG) -
image/png: Портативная сетевая графика (PNG) -
image/svg+xml: Масштабируемая векторная графика (SVG) -
image/webp: Формат веб-изображений (WEBP)
Руководство по типам и форматам файлов изображений Image file type and format guide предоставляет информацию и рекомендации о том, когда использовать разные форматы изображений.
Типы аудио и видео
Как и в случае с изображениями, HTML не предписывает, чтобы веб-браузеры поддерживали какие-либо конкретные типы файлов и кодеков для элементов <audio> и <video>, поэтому важно учитывать вашу целевую аудиторию и диапазон браузеров (и версий этих браузеров), которые они могут использовать, при выборе типа файла и кодеков для медиа.
Наше руководство по контейнерам для медиа media container formats guide предоставляет список типов файлов, которые обычно поддерживаются веб-браузерами, включая информацию о том, какие у них могут быть особые случаи использования, какие недостатки у них есть и информация о совместимости, а также другие детали.
Руководства по кодекам аудио audio codec и видео video codec перечисляют различные кодеки, которые часто поддерживаются веб-браузерами, предоставляя подробности о совместимости, а также техническую информацию, такую как количество каналов аудио, используемый тип сжатия и битрейты и т. д. Руководство по кодекам, используемым WebRTC codecs used by WebRTC, дополняет это, конкретно описывая кодеки, поддерживаемые основными веб-браузерами, так что вы можете выбрать кодеки, которые лучше всего покрывают диапазон браузеров, которые вы хотите поддержать.
Что касается MIME-типов аудио- или видеофайлов, они обычно указывают формат контейнера (тип файла). Дополнительный параметр codecs parameter может быть добавлен к MIME-типу, чтобы дополнительно указать, какие кодеки использовать и какие параметры были использованы для кодирования медиа, такие как профиль кодека, уровень или другая подобная информация.
Ниже приведены наиболее часто используемые MIME-типы для веб-контента. Однако это неполный список всех доступных типов. Обратитесь к руководству по контейнерам для медиа media container formats guide для получения дополнительной информации.
| MIME тип | Тип аудио или видео |
|---|---|
audio/wave audio/wav audio/x-wav audio/x-pn-wav
| Аудиофайл в формате WAVE. Кодек PCM (кодек WAVE "1") часто поддерживается, но другие кодеки имеют ограниченную поддержку (если таковая имеется). |
audio/webm | Аудиофайл в формате контейнера WebM. Vorbis и Opus — кодеки, официально поддерживаемые спецификацией WebM. |
video/webm | Видеофайл, возможно с аудио, в формате контейнера WebM. VP8 и VP9 — наиболее распространенные видеокодеки; Vorbis и Opus — наиболее распространённые аудиокодеки. |
audio/ogg | Аудиофайл в формате контейнера Ogg. Vorbis — наиболее распространённый аудиокодек, используемый в таком контейнере; однако, Opus теперь также поддерживается Ogg. |
video/ogg | Видеофайл, возможно с аудио, в формате контейнера Ogg. Theora — обычный видеокодек, используемый в нём; Vorbis — обычный аудиокодек, хотя Opus становится всё более распространённым. |
application/ogg | Аудио- или видеофайл с использованием контейнера Ogg. Theora — обычный видеокодек, используемый в нём; Vorbis — обычный аудиокодек. |
multipart/form-data
Тип multipart/form-data может использоваться при отправке значений заполненной HTML-формы из браузера на сервер.
В качестве многочастного формата документа он состоит из различных частей, разделенных разделителем (строка, начинающаяся с двойного дефиса --). Каждая часть представляет собой отдельную сущность со своими HTTP-заголовками, Content-Disposition и Content-Type для полей загрузки файлов.
Content-Type: multipart/form-data; boundary=aBoundaryString (other headers associated with the multipart document as a whole) --aBoundaryString Content-Disposition: form-data; name="myFile"; filename="img.jpg" Content-Type: image/jpeg (data) --aBoundaryString Content-Disposition: form-data; name="myField" (data) --aBoundaryString (more subparts) --aBoundaryString--
Следующее <form>:
<form action="http://localhost:8000/" method="post" enctype="multipart/form-data"> <label>Name: <input name="myTextField" value="Test" /></label> <label><input type="checkbox" name="myCheckBox" /> Check</label> <label> Upload file: <input type="file" name="myFile" value="test.txt"/> </label> <button>Send the file</button> </form>
отправит это сообщение:
POST / HTTP/1.1 Host: localhost:8000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498 Content-Length: 465 -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myTextField" Test -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myCheckBox" on -----------------------------8721656041911415653955004498 Content-Disposition: form-data; name="myFile"; filename="test.txt" Content-Type: text/plain Simple file. -----------------------------8721656041911415653955004498--
multipart/byteranges
MIME-тип multipart/byteranges используется для отправки частичных ответов в браузер.
Когда отправляется код состояния 206 Partial Content, этот MIME-тип указывает, что документ состоит из нескольких частей, по одной для каждого запрошенного диапазона. Как и другие типы multipart, Content-Type использует разделитель boundary, чтобы разделить части. Каждая часть имеет заголовок Content-Type со своим фактическим типом и Content-Range представляемого диапазона.
HTTP/1.1 206 Partial Content Accept-Ranges: bytes Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 Content-Length: 385 --3d6b6a416f9b5 Content-Type: text/html Content-Range: bytes 100-200/1270 eta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content --3d6b6a416f9b5 Content-Type: text/html Content-Range: bytes 300-400/1270 -color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica --3d6b6a416f9b5--
Важность правильного задания MIME-типа
Большинство веб-серверов отправляют нераспознанные ресурсы как MIME-тип application/octet-stream. По соображениям безопасности большинство браузеров не позволяют устанавливать пользовательское действие по умолчанию для таких ресурсов, заставляя пользователя сохранить его на диск для использования.
Некоторые распространённые неправильные конфигурации сервера:
- RAR-архивы. В этом случае идеальным было бы указать истинный тип исходных файлов; это часто невозможно, так как файлы .RAR могут содержать несколько ресурсов разных типов. В этом случае настройте сервер на отправку
application/x-rar-compressed. - Аудио и видео. Только ресурсы с правильным MIME-типом будут воспроизводиться в элементах
<video>или<audio>. Убедитесь, что указан правильный тип медиа для аудио и видео. - Собственные типы файлов. Избегайте использования
application/octet-stream, так как большинство браузеров не позволяют определить поведение по умолчанию (например, "Открыть в Word") для этого универсального MIME-типа. Конкретный тип, например,application/vnd.mspowerpoint, позволяет пользователям автоматически открывать такие файлы в программном обеспечении для презентаций по своему выбору.
Определение MIME-типа
При отсутствии MIME-типа или в определённых случаях, когда браузеры считают его неправильным, браузеры могут выполнять определение MIME-типа — угадывать правильный MIME-тип, анализируя байты ресурса.
Каждый браузер выполняет определение MIME-типа по-разному и в разных ситуациях. (Например, Safari будет анализировать расширение файла в URL, если переданный MIME-тип неподходящий.) Существуют проблемы безопасности, так как некоторые MIME-типы представляют исполняемый контент. Серверы могут предотвратить определение MIME-типа, отправив заголовок X-Content-Type-Options.
Другие способы передачи типа документа
MIME-типы не единственный способ передачи информации о типе документа:
- Иногда используются расширения имён файлов, особенно в Microsoft Windows. Не все операционные системы считают эти расширения значимыми (такие как Linux и macOS), и нет гарантии, что они правильные.
- Магические числа. Синтаксис различных форматов позволяет определить тип файла, анализируя его структуру байтов. Например, файлы GIF начинаются с шестнадцатеричного значения
47 49 46 38 39(GIF89), а файлы PNG с89 50 4E 47(.PNG). Не все типы файлов имеют магические числа, поэтому этот метод тоже не является стопроцентно надёжным.
См. также
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types