Открыть сервис

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). Основной тип определяет общую категорию данных, а подтип уточняет конкретный формат.

Формат записи: тип/подтип

Например:

Дополнительно могут указываться параметры (parameters), которые передаются после точки с запятой (;) и уточняют кодировку, границы частей или другие характеристики. Наиболее распространённый параметр — charset, определяющий кодировку текста:

text/plain; charset=UTF-8

Основные типы

Согласно стандарту IANA (Internet Assigned Numbers Authority), все MIME-типы делятся на несколько основных категорий. Наиболее употребительные:

Подтипы и иерархия

Подтипы могут быть стандартными (зарегистрированными в IANA) или экспериментальными/частными. Стандартные подтипы не имеют префикса. Для частных и экспериментальных типов используются префиксы:

Применение в вебе

В протоколе 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, .htmHTML-документ
text/css.cssТаблица стилей
text/javascript.jsJavaScript-код
application/json.jsonДанные в формате JSON
application/xml.xmlXML-документ
application/pdf.pdfДокумент PDF
application/zip.zipZIP-архив
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).

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →