MIME-тип
MIME-тип (Multipurpose Internet Mail Extensions, многоцелевые расширения интернет-почты), также известный как тип носителя (media type) или тип содержимого (content type) — это стандартизированный идентификатор, используемый в протоколах передачи данных (прежде всего HTTP и SMTP) для указания формата и природы передаваемого файла, ресурса или части сообщения. MIME-тип позволяет клиентскому приложению (браузеру, почтовому клиенту) корректно интерпретировать и обрабатывать полученные данные, а не полагаться исключительно на расширение имени файла.
История возникновения
Изначально протокол электронной почты SMTP (Simple Mail Transfer Protocol) был предназначен только для передачи текстовых сообщений в кодировке ASCII. Это ограничивало возможность отправки вложений — изображений, аудиофайлов, исполняемых программ или документов в форматах, отличных от простого текста. В 1992 году группой инженеров под руководством Натаниэля Боренштейна (Nathaniel Borenstein) и Неда Фрида (Ned Freed) была разработана спецификация MIME (RFC 1341, позже заменённая на RFC 2045–2049). Первоначально MIME создавался как расширение для электронной почты, позволяющее кодировать двоичные данные в текстовый формат (Base64) и указывать их тип. Однако механизм оказался настолько универсальным, что вскоре был адаптирован для протокола HTTP (World Wide Web), где стал основным способом описания содержимого ответов сервера.
Структура MIME-типа
MIME-тип состоит из двух частей, разделённых косой чертой (/): основного типа (type) и подтипа (subtype). Основной тип определяет общую категорию данных, а подтип уточняет конкретный формат.
Формат записи: тип/подтип
Например:
text/html— текстовый документ в формате HTML.image/png— изображение в формате PNG.application/pdf— документ в формате PDF.
Дополнительно могут указываться параметры (parameters), которые передаются после точки с запятой (;) и уточняют кодировку, границы частей или другие характеристики. Наиболее распространённый параметр — charset, определяющий кодировку текста:
text/plain; charset=UTF-8
Основные типы
Согласно стандарту IANA (Internet Assigned Numbers Authority), все MIME-типы делятся на несколько основных категорий. Наиболее употребительные:
- text — текстовые данные, читаемые человеком без специального ПО. Подтипы:
plain(обычный текст),html,css,javascript,csv,xmlи др. - image — графические изображения. Подтипы:
jpeg,png,gif,bmp,webp,svg+xml(векторная графика). - audio — аудиоданные. Подтипы:
mpeg,ogg,wav,aac,flac. - video — видеоданные. Подтипы:
mp4,webm,ogg,avi. - application — двоичные данные, исполняемые файлы, документы специфических форматов. Подтипы:
octet-stream(общий поток байтов, используется для неизвестных типов),pdf,zip,json,xml,x-www-form-urlencoded,vnd.api+json(для REST API) и др. - multipart — составные данные, состоящие из нескольких независимых частей, каждая со своим MIME-типом. Подтипы:
mixed(произвольные части),form-data(данные HTML-форм),alternative(одно и то же содержание в разных форматах),byteranges(частичные запросы HTTP). - message — данные, представляющие собой целое сообщение или его часть. Подтипы:
rfc822(полное письмо),partial(фрагмент сообщения).
Подтипы и иерархия
Подтипы могут быть стандартными (зарегистрированными в IANA) или экспериментальными/частными. Стандартные подтипы не имеют префикса. Для частных и экспериментальных типов используются префиксы:
vnd.— vendor-specific (специфичный для конкретного разработчика или организации). Например:application/vnd.ms-excel(документ Microsoft Excel),application/vnd.oasis.opendocument.text(OpenDocument).x-— нестандартный, экспериментальный тип (устаревшая практика, не рекомендуется к использованию в новых протоколах). Например:application/x-www-form-urlencoded,application/x-shockwave-flash.
Применение в вебе
В протоколе HTTP MIME-тип передаётся в заголовке ответа Content-Type. Браузер, получив этот заголовок, определяет, как обработать ресурс: отобразить как HTML-страницу, скачать как файл, запустить плагин или открыть встроенным просмотрщиком. Если сервер не указывает MIME-тип или указывает неверный, браузер может попытаться угадать его по содержимому (MIME sniffing), что создаёт риски безопасности (например, исполнение скриптов вместо отображения текста).
Пример HTTP-ответа: `` HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 ``
Для вложений, которые должны быть скачаны, а не отображены, используется заголовок Content-Disposition: attachment; filename="...", но MIME-тип при этом остаётся корректным (например, application/zip).
Проблема неверной идентификации
Одной из распространённых проблем является неправильная настройка MIME-типов на сервере. Например, если CSS-файл отдаётся как text/plain, браузер может не применить стили. Если JavaScript-файл отдаётся как text/html, он может быть проигнорирован или выполнен некорректно. Для решения этой задачи веб-серверы (Apache, Nginx, IIS) используют конфигурационные файлы, сопоставляющие расширения файлов с MIME-типами.
Регистрация и стандартизация
Реестр MIME-типов ведётся организацией IANA. Процесс регистрации нового типа описан в RFC 6838. Заявка должна содержать описание типа, его назначение, примеры использования и указание на разработчика. Стандартные типы проходят более строгую процедуру, чем частные (vnd.). Экспериментальные типы с префиксом x- не регистрируются и считаются устаревшими.
Безопасность
MIME-типы играют важную роль в обеспечении безопасности веб-приложений. Атаки типа MIME confusion (или content type confusion) основаны на том, что злоумышленник заставляет сервер отдавать вредоносный файл с неверным MIME-типом, чтобы обойти защиту браузера. Для предотвращения этого современные браузеры используют механизм X-Content-Type-Options: nosniff, который запрещает MIME-сниффинг и обязывает браузер строго следовать заголовку Content-Type.
Примеры распространённых MIME-типов
| MIME-тип | Расширение файла | Описание |
|---|---|---|
text/plain | .txt | Обычный текст |
text/html | .html, .htm | HTML-документ |
text/css | .css | Таблица стилей |
text/javascript | .js | JavaScript-код |
application/json | .json | Данные в формате JSON |
application/xml | .xml | XML-документ |
application/pdf | Документ PDF | |
application/zip | .zip | ZIP-архив |
image/jpeg | .jpg, .jpeg | Изображение JPEG |
image/png | .png | Изображение PNG |
image/gif | .gif | Изображение GIF |
image/svg+xml | .svg | Векторное изображение SVG |
audio/mpeg | .mp3 | Аудиофайл MP3 |
video/mp4 | .mp4 | Видеофайл MP4 |
multipart/form-data | — | Данные HTML-формы (запрос POST) |
application/octet-stream | .bin, .exe | Двоичный поток (неизвестный тип) |
Связь с расширениями файлов
Хотя MIME-тип и расширение файла часто коррелируют, они не являются взаимозаменяемыми. Расширение — это атрибут файловой системы, а MIME-тип — метаданные протокола передачи. Сервер может отдать файл с любым расширением, указав при этом произвольный MIME-тип. Браузеры и почтовые клиенты доверяют заголовку Content-Type, а не расширению, хотя при сохранении файла расширение может быть подставлено на основе MIME-типа.
Применение в электронной почте
В протоколе SMTP MIME-типы используются в заголовках Content-Type письма и его частей. Письмо может быть составным (multipart), содержать текстовую и HTML-версии, вложения. Каждая часть имеет свой MIME-тип. Для вложений обычно используется application/octet-stream или более точный тип. Кодирование двоичных данных в текст осуществляется с помощью схемы Base64 (Content-Transfer-Encoding: base64).
Применение в API
В REST API MIME-типы используются для согласования формата данных между клиентом и сервером. Клиент указывает в заголовке Accept, какие типы он готов принять (например, application/json или application/xml). Сервер отвечает с соответствующим Content-Type. Это позволяет одному и тому же эндпоинту отдавать данные в разных форматах в зависимости от предпочтений клиента (content negotiation).
Источники
- RFC 2045–2049 — Multipurpose Internet Mail Extensions (MIME)
- RFC 6838 — Media Type Specifications and Registration Procedures
- IANA Media Types Registry — официальный реестр MIME-типов
- HTTP/1.1: Semantics and Content (RFC 7231) — раздел о Content-Type
- Документация веб-серверов Apache и Nginx по настройке MIME-типов
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →