This page was translated from English by the community.Learn more and join the MDN Web Docs community.
MIME types
Медиа тип (так же известный какMultipurpose Internet Mail Extensions илиMIME тип) является стандартом, который описывает природу и формат документа, файла или набора байтов. Он определён и стандартизирован в спецификацииRFC 6838 .
ОрганизацияInternet Assigned Numbers Authority (IANA) является ответственной за все официально признанные MIME типы, и вы можете найти самый последний и полный лист MIME типов на их страницеМедиа Типов.
Предупреждение:Для принятия решения о том, как обрабатывать URL, браузеры используют MIME типы,а не расширения файлов, так что серверам необходимо отправлять правильные MIME типы вContent-Type заголовке ответа. При неточном задавании этого заголовка, браузеры с большой вероятностью будут неправильно интерпретировать и обрабатывать содержание файлов, из-за чего сайт будет работать неверно.
In this article
Структура MIME типа
Простейший MIME тип состоит изтипа иподтипа — двух строк разделённых наклонной чертой (/), без использования пробелов.
тип/подтип
Тип представляет общую категорию, в которой находится тип данных, напримерvideo илиtext.Подтип же строго отождествляется с отдельным типом данных, представляемых данным MIME типом. Например, для MIME типаtext, подтипы могут бытьplain (простой текст),html (HTML source code) илиcalendar (для iCalendar.ics).
Необязательныйпараметр может быть добавлен для указания дополнительных деталей
тип/подтип;параметр=значение
Например, для MIME типов категорииtext, необязательный параметрcharset может быть задан для уточнения кодировки, используемой в документе. Для объявления, что пересылаемый файл имеет кодировку UTF-8, необходимо использовать MIME типtext/plain;charset=UTF-8. При не указании параметраcharset, его значение автоматически будет задано, какASCII (US-ASCII), если в настройках браузера не будет определено иначе.
MIME типы являются нечувствительными к регистру, но традиционно их пишут строчными буквами, за исключением значений параметров.
Типы
Все типы можно разделить на два класса:дискретные имногокомпонентные. Дискретные типы представляют одиночные файлы, например, одиночный текстовый, музыкальный или видео файл. Многокомпонентные типы представляют документы, составленные из нескольких частей, каждая из которых может иметь свой отдельный MIME тип, или они могут заключать в себе несколько отдельных файлов, передаваемых в одном сообщении. Например, многокомпонентные MIME типы используются для передачи нескольких изображений в одном email.
Дискретные типы
В настоящее время на IANA зарегистрированы следующие дискретные типы:
applicationСписок IANAЛюбой вид бинарных данных, явно не попадающих ни в одну другую группу типов. Данные, которые будут выполняться или как-либо интерпретироваться, или данные для выполнения, которых необходимо отдельное приложение. Для указания базового типа бинарных данных (данных без определённого типа) используют тип
application/octet-stream. Другие распространённые примеры включаютapplication/pdf,application/pkcs8иapplication/zip.audioСписок IANAАудио или музыкальные данные. Примеры:
audio/mpeg,audio/vorbis.exampleТип, зарезервированный для написания примеров, отображающих использование MIME типов. Этот тип никогда не должен использоваться вне примеров кода или документации.
exampleможет так же использоваться, как подтип.fontСписок IANAДанные шрифтов. Распространённые примеры включают
font/woff,font/ttfиfont/otf.imageСписок IANAИзображения или графические данные, включая векторную и растровую графику, а так же анимированные версии форматов неподвижных изображений, таких какGIF или APNG. Распространённые примеры включают
image/jpeg,image/png, иimage/svg+xml.modelСписок IANAДанные моделей для 3D объектов или сцен. Примеры:
model/3mfиmodel/vml.textСписок IANAЛюбые текстовые данные, так или иначе доступные для чтения человеку, а так же исходный код или текстовые данные для программ. Примеры:
text/plain,text/csvиtext/html.videoСписок IANAВидео данные или файлы. Например, MP4 фильмы (
video/mp4).
Любые текстовые документы без определённого подтипа стоит отправлять, какtext/plain тип. Аналогичным образом,application/octet-stream тип подойдёт бинарным документам при неопределённом или неизвестном подтипе.
Многокомпонентные типы
Многокомпонентные типы описывают категории разграниченных на части документов, где каждая из частей может иметь свой отдельный MIME тип. При работе с электронными письмами, они могут использоваться для описания нескольких отдельных файлов, передаваемых в одном сообщении. Они представляютсоставные документы.
За исключениемmultipart/form-data типа, используемого вPOST методеHTML форм, иmultipart/byteranges типа, используемом в ответе206Partial Content для отправки части документа, HTTP никаким особым образом не обрабатывает многокомпонентные типы, и просто отправляет данные в браузер (который, с большой вероятностью, предложит сохранить переданный файл, тоже не зная как его обработать).
Существуют два многокомпонентных типа:
messageСписок IANAСообщение, включающее в себя другие сообщения. Этот тип может использоваться, например, для представления сообщения, которое включают в себя другое переадресованное сообщение, как часть данных, или для отправки больших сообщений по частям, как если бы каждое сообщение отправлялось отдельно. Примеры включают
message/rfc822(для переадресованных или цитируемых сообщений) иmessage/partialдля автоматического разделения одного большого сообщения на несколько небольших и их последующей сборки на стороне получателя.multipartСписок IANAДанные составленные из нескольких компонентов, каждый из которых может иметь отдельный MIME тип. Примеры включают
multipart/form-data(для данных созданных с помощьюFormDataAPI) иmultipart/byteranges(определённого вRFC 7233: 5.4.1 и используемого в ответахHTTP206"Partial Content", когда запрашиваемые данные возвращаются по частям в нескольких сообщениях, как например, при использовании заголовкаRange).
Важные для Web-разработчиков MIME типы
>application/octet-stream
Этот тип является базовым для бинарных данных. В связи с тем, что он подразумеваетнеопределённые бинарные данные, браузеры, как правило, не будут пытаться его обработать каким-либо образом, а вызовут для него диалоговое окно «Сохранить как», как если бы заголовок ответаContent-Disposition имел значениеattachment.
text/plain
Этот тип является базовым для текстовых файлов. Несмотря на то, что он означает "неопределённые текстовые данные", браузеры всё равно могут его отображать.
Примечание:text/plain не означает "любой вид текстовых данных". Если браузер ожидает получения какого-то конкретного типа текстовых данных, то с большой вероятностью он не будет считатьtext/plain подходящим типом. Например, при загрузкеtext/plain документа через<link> элемент, браузер не будет его признавать правильным CSS файлом и использовать для применения стилей. Толькоtext/css тип должен использоваться для загрузки CSS документов.
text/css
CSS документы, используемые для стилизации web-страницдолжны отправляться, какtext/css тип. Большинство браузеров не смогут распознавать CSS документы, загруженные с отличным отtext/css MIME типом.
text/html
Все HTML данные должны пересылаться с данным типом. Альтернативные MIME типы для XHTML (например,application/xhtml+xml) почти не используются в настоящее время.
Примечание:Используйтеapplication/xml илиapplication/xhtml+xml, когда вам необходим строгий синтаксический анализ документов, разделы<![CDATA[…]]> или элементы, не принадлежащие к пространствам имён HTML/SVG/MathML.
text/javascript
Согласно HTML спецификации: при пересылке JavaScript файлов, всегда должен использоваться MIME типtext/javascript.
По исторически сложившимся причинам,MIME Sniffing Standard (стандарт, определяющий, как браузеры должны интерпретировать медиа типы и выяснять, как обрабатывать данные при неправильно заданных медиа типах) позволяет серверам отправлять JavaScript документы, используя один из нижеперечисленных типов:
application/javascriptapplication/ecmascriptapplication/x-ecmascriptНе стандартноapplication/x-javascriptНе стандартноtext/javascripttext/ecmascripttext/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-тип, который гарантированно будет работать в настоящее время и в будущем.
Иногда вы можете заметить использованиеtext/javascript MIME типа в связке с параметромcharset, для уточнения кодировки, в которой был написан файл. Такое определение MIME типа является неправильным, и в большинстве случаев браузеры не станут загружать скрипт, передаваемый с таким типом.
Типы изображений
Файлы, MIME типом которых являетсяimage, содержат в себе данные изображений. Подтип определяет, какой конкретный формат изображения представлен в данных.
Лишь несколькотипов изображений достаточно распространены, чтобы безопасно использоваться на веб-страницах.
Аудио и видео типы
Так же как в случае с изображениями, стандарт HTML не обязывает браузеры поддерживать какие-либо определённые форматы и кодеки для<audio> и<video> элементов, так что при их выборе, важно брать в расчёт целевую аудиторию и диапазон браузеров (а так же версии этих браузеров), которые она может использовать.
Нашеруководство по медиа форматам предоставляет список общепринятых типов, включая информацию об особых случаях при их использовании, их недостатках, совместимости, а так же других деталях.
Руководства поаудио ивидео кодекам перечисляют часто поддерживаемые браузерами кодеки, предоставляя детали по их совместимости и техническую информацию, например как много аудио каналов они поддерживают, какой тип сжатия используют, и так далее. Руководство поиспользуемым в WebRTC кодекам развивает эту тему ещё дальше, конкретно описывая кодеки, поддерживаемые популярными браузерами, так чтобы вы могли выбрать кодеки, которые имеют наилучшую поддержку в диапазоне браузеров по вашему выбору.
Что касается MIME типов для аудио и видео файлов, то чаще всего они указывают на формат контейнера (тип файла). Необязательныйпараметрcodecs может быть добавлен к MIME типу для более точного указания, какой кодек и параметры использовались для пересылаемого файла.
Ниже перечислены наиболее часто используемые на веб-страницах MIME типы. Обратите внимание, что это не полный перечень всех доступных типов. Более полный список поддерживаемых форматов может быть найден вруководстве по медиа форматам.
| MIME тип | Аудио или видео тип |
|---|---|
audio/waveaudio/wavaudio/x-wavaudio/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 кодека. |
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)--aBoundaryStringContent-Disposition: form-data; name="myFile"; filename="img.jpg"Content-Type: image/jpeg(data)--aBoundaryStringContent-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.1Host: localhost:8000User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateConnection: keep-aliveUpgrade-Insecure-Requests: 1Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498Content-Length: 465-----------------------------8721656041911415653955004498Content-Disposition: form-data; name="myTextField"Test-----------------------------8721656041911415653955004498Content-Disposition: form-data; name="myCheckBox"on-----------------------------8721656041911415653955004498Content-Disposition: form-data; name="myFile"; filename="test.txt"Content-Type: text/plainSimple file.-----------------------------8721656041911415653955004498--
multipart/byteranges
multipart/byteranges MIME тип используется для отправки данных в браузер по частям.
При отправке кода состояния206Partial Content, этот MIME тип будет означать, что документ состоит из нескольких частей, по одной для каждого отдельно запрашиваемого диапазона. Аналогично с остальными многокомпонентными типами, заголовокContent-Type используется для объявления границыboundary, разделяющей документ на отдельные компоненты. Каждый компонент имеет заголовокContent-Type, описывающий тип сегмента данных, иContent-Range, описывающий его диапазон.
HTTP/1.1 206 Partial ContentAccept-Ranges: bytesContent-Type: multipart/byteranges; boundary=3d6b6a416f9b5Content-Length: 385--3d6b6a416f9b5Content-Type: text/htmlContent-Range: bytes 100-200/1270eta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="vieport" content--3d6b6a416f9b5Content-Type: text/htmlContent-Range: bytes 300-400/1270-color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica--3d6b6a416f9b5--
Важность задания правильногоMIMEтипа
Большинство серверов отправляет ресурсы неопределённого типа, какapplication/octet-stream MIME тип. Большинство же браузеров, в целях безопасности, не позволяет их никак обрабатывать, вынуждая пользователя сохранять их на жёсткий диск, для дальнейшего использования.
Несколько советов по правильной настройке MIME типов на серверах:
- RAR-сжатые файлы. В этом случае самым правильным вариантом было бы задать тип изначального ресурса; но это не всегда выполнимо, так как .RAR файлы могут хранить в себе несколько типов данных. Тогда, настройте сервер на отправку
application/x-rar-compressedMIME типа вместе с RAR ресурсами. - Аудио и видео. Только ресурсы с правильно заданными MIME типами могут производиться в
<video>и<audio>элементах. Убедитесь, что выиспользуете правильные типы для аудио и видео данных. - Запатентованные типы файлов. Избегайте использования
application/octet-streamпри их отправке, так как большинство браузеров не позволит определять способы обработки (например, "Открыть в Word") для этого базового MIME типа. Используйте специальные типы, напримерapplication/vnd.mspowerpoint, чтобы позволить пользователям открывать загруженный ресурс в программе по их выбору.
MIME sniffing
В отсутствии заданного MIME типа, или в определённых случаях, когда браузеры полагают, что MIME тип задан неправильно, они могут выполнятьMIME sniffing — попытку угадать правильный MIME тип, анализируя характеристики ресурса.
Каждый браузер выполняет MIME sniffing по-своему и при разных условиях (например, Safari будет смотреть на расширение файла, если переданный MIME тип является неподходящим для документа). В этих случаях могут присутствовать опасения по поводу безопасности, так как некоторые MIME типы представляют исполняемые файлы. Сервера имеют возможность предотвращать MIME sniffing, отправляяX-Content-Type-Options заголовок ответа.
Другие методы сообщения о типе ресурса
MIME типы не являются единственным способом сообщения типа документа:
- Суффиксы в названиях файлов могут указывать на тип документа, главным образом на Microsoft Windows. Но не все операционные системы могут считать их имеющими смысл (например, Linux или MacOS). А так же нет никакой гарантии, что они будут указывать на правильный тип.
- Магические числа. Синтаксисы различных форматов позволяют узнавать их тип, через анализ их структуры байтов. Например, GIF файлы начинаются с
47 49 46 38 39шестнадцатеричного значения (GIF89), а PNG файлы с89 50 4E 47(.PNG). Опять же, не все типы документов имеют магические числа, так что этот подход так же не надёжен на 100%.