Типы MIME
Типы медиа (типы MIME)
Тип медиа (ранее известный как Multipurpose Internet Mail Extensions или тип MIME) указывает на характер и формат документа, файла или набора байтов. Типы MIME определены и стандартизированы в RFC 6838 IETF.
Управление по присвоению номеров в Интернете (IANA) отвечает за все официальные типы MIME. Самый актуальный и полный список можно найти на странице типов медиа.
Предупреждение: браузеры используют тип 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. (См. реестр типов application в IANA) audio-
Аудиоданные или музыкальные данные. Примеры:
audio/mpeg,audio/vorbis. (См. реестр типов audio в IANA) example-
Зарезервирован для использования в качестве заполнителя в примерах, демонстрирующих использование типов MIME. Такие типы не следует использовать вне примеров кода и документации.
exampleтакже можно использовать в качестве подтипа; например, в примере, связанном с работой со звуком в интернете, тип MIMEaudio/exampleможно использовать, чтобы показать, что это заполнитель, который при использовании кода в реальных условиях следует заменить подходящим типом. font-
Данные шрифтов. Распространённые примеры:
font/woff,font/ttfиfont/otf. (См. реестр типов font в IANA) image-
Данные изображений или графики, включая растровые и векторные статичные изображения, а также анимированные версии форматов статичных изображений, например анимированные GIF или APNG. Распространённые примеры:
image/jpeg,image/pngиimage/svg+xml. (См. реестр типов image в IANA) model-
Данные модели трёхмерного объекта или сцены. Примеры:
model/3mfиmodel/vrml. (См. реестр типов model в IANA) text-
Текстовые данные, включая любое содержимое, понятное человеку, исходный код или текстовые данные, например данные в формате CSV (значения, разделённые запятыми). Примеры:
text/plain,text/csvиtext/html. (См. реестр типов text в IANA) video-
Видеоданные или видеофайлы, например фильмы в формате MP4 (
video/mp4). (См. реестр типов video в IANA)
Для текстовых документов без конкретного подтипа следует использовать text/plain. Аналогично для двоичных документов без конкретного или известного подтипа следует использовать application/octet-stream.
Составные типы
Составные типы обозначают категорию документов, разделённых на части, часто с разными типами MIME; их также можно использовать — особенно при работе с электронной почтой — для представления нескольких отдельных файлов, являющихся частью одной транзакции. Они представляют собой составной документ.
За исключением multipart/form-data, используемого в методе POST для HTML-форм, и multipart/byteranges, используемого с Partial Content 206 для отправки части документа, HTTP не обрабатывает составные документы особым образом: сообщение передаётся браузеру (который, скорее всего, покажет окно «Сохранить как», если не знает, как отобразить документ).
Существует два составных типа:
message-
Сообщение, содержащее другие сообщения. Его можно использовать, например, чтобы представить электронное письмо, содержащее пересланное сообщение, или отправить очень большое сообщение по частям, как если бы оно состояло из нескольких сообщений. Примеры:
message/rfc822(для цитирования пересланного сообщения или сообщения, на которое отвечают) иmessage/partial, позволяющий автоматически разбить большое сообщение на меньшие части, которые получатель сможет собрать обратно. (См. реестр типов message в IANA) multipart-
Данные, состоящие из нескольких компонентов, каждый из которых может иметь собственный тип MIME. Примеры:
multipart/form-data(для данных, сформированных с помощью APIFormData) иmultipart/byteranges(определённый в RFC 7233, раздел 5.4.1 и используемый с ответом «Частичное содержимое»206в HTTP, который возвращается, когда получены только часть содержимого, например при передаче с помощью заголовка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
Содержимое JavaScript всегда следует передавать с типом MIME text/javascript. По историческим причинам браузеры могут поддерживать некоторые устаревшие типы JavaScript, перечисленные ниже, но не следует полагать, что скрипты, переданные с любым типом MIME, отличным от text/javascript, всегда будут загружаться или выполняться.
Обратите внимание: в HTML атрибут type элементов <script> может содержать только основу типа MIME JavaScript: text/javascript либо одно из ключевых слов module (для модулей ES) или importmap. Добавление любого параметра в атрибут type, например charset=utf-8, равносильно заданию атрибуту type нераспознанного значения: содержимое скрипта будет считаться блоком данных и не выполнится как JavaScript. Обратите внимание, что задавать type="text/javascript" больше не нужно: это значение по умолчанию для элементов <script>, поэтому в этом случае атрибут type можно опустить. В отличие от этого, при использовании HTTP-заголовка Content-Type параметр charset, как обычно, можно указать при желании.
Дополнительные сведения см. в реестре типов медиа IANA, RFC 9239 и спецификации HTML.
Устаревшие типы MIME JavaScript
Помимо типа MIME text/javascript, по историческим причинам стандарт MIME Sniffing (определяющий, как браузеры должны интерпретировать типы 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, работа которого гарантирована сейчас и в будущем.
application/json
JSON (JavaScript Object Notation) — это стандартный текстовый формат для представления структурированных данных, основанный на синтаксисе объектов JavaScript. Он широко используется для передачи данных в веб-приложениях.
Типы изображений
Файлы с типом MIME image содержат данные изображений. Подтип указывает конкретный формат файла изображения, представленный этими данными.
Следующие типы изображений достаточно широко распространены, чтобы считаться безопасными для использования на веб-страницах:
-
image/apng: анимированная графика в формате Portable Network Graphics (APNG) -
image/avif: формат файлов изображений AV1 (AVIF) -
image/gif: формат обмена графикой (GIF) -
image/jpeg: изображение в формате Joint Photographic Experts Group (JPEG) -
image/png: портативная сетевая графика (PNG) -
image/svg+xml: масштабируемая векторная графика (SVG) -
image/webp: формат изображений Web Picture (WEBP)
Руководство по типам и форматам файлов изображений содержит сведения и рекомендации о том, когда использовать различные форматы изображений.
Типы аудио и видео
Как и в случае с изображениями, HTML не требует, чтобы веб-браузеры поддерживали какие-либо конкретные типы файлов и кодеков для элементов <audio> и <video>. Поэтому при выборе типа файла и кодеков для медиа важно учитывать целевую аудиторию и набор браузеров (а также их версий), которыми она может пользоваться.
В нашем руководстве по форматам медиаконтейнеров перечислены типы файлов, которые обычно поддерживаются веб-браузерами. В нём также приведены сведения об особенностях их применения, недостатках и совместимости, а также другая информация.
В руководствах по аудиокодекам и видеокодекам перечислены различные кодеки, которые часто поддерживаются веб-браузерами. В них приведены сведения о совместимости и технические подробности, например о количестве поддерживаемых аудиоканалов, используемом типе сжатия и подходящих битрейтах. Руководство по кодекам, используемым WebRTC, дополняет эту информацию и посвящено кодекам, поддерживаемым основными веб-браузерами. Оно поможет выбрать кодеки, подходящие для набора браузеров, поддержку которых вы планируете обеспечить.
Типы MIME аудио- и видеофайлов обычно указывают формат контейнера (тип файла). В тип MIME можно добавить необязательный параметр codecs, чтобы подробнее указать, какие кодеки использовать и какие параметры применялись при кодировании медиа, например профиль и уровень кодека или другие подобные сведения.
Дополнительные сведения о распространённых типах медиа см. на странице Распространённые типы MIME.
multipart/form-data
Тип multipart/form-data можно использовать при отправке значений заполненной HTML-формы из браузера на сервер.
Как формат составного документа он состоит из разных частей, разделённых граничной строкой (строкой, начинающейся с двух дефисов --). Каждая часть представляет собой отдельную сущность с собственными HTTP-заголовками, заголовком Content-Disposition и заголовком Content-Type для полей загрузки файлов.
Content-Type: multipart/form-data; boundary=boundaryString (other headers associated with the multipart document as a whole) --boundaryString Content-Disposition: form-data; name="myFile"; filename="img.jpg" Content-Type: image/jpeg (data) --boundaryString Content-Disposition: form-data; name="myField" (data) --boundaryString (more subparts) --boundaryString--
Следующий <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 указывает, что документ состоит из нескольких частей — по одной для каждого запрошенного диапазона. Как и в других составных типах, заголовок 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 может использоваться для оптимизации, например для объединения, сжатия или кэширования файлов. Пример конфигурации Apache, сжимающей файлы определённых типов MIME, см. в h5bp/server-configs-apache.
Большинство веб-серверов отправляют нераспознанные ресурсы с типом MIME application/octet-stream. В целях безопасности большинство браузеров не позволяют задать для таких ресурсов пользовательское действие по умолчанию (например, «Открыть в Word»), поэтому пользователю приходится сохранять их на диск, чтобы воспользоваться ими.
Некоторые распространённые ошибки конфигурации серверов:
- Файлы, сжатые в RAR. В этом случае лучше всего было бы использовать фактический тип исходных файлов, однако часто это невозможно, поскольку файлы .RAR могут содержать несколько ресурсов разных типов. В таком случае настройте сервер на отправку
application/x-rar-compressed. - Аудио и видео. В элементах
<video>и<audio>будут воспроизводиться только ресурсы с правильным типом 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–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types