Перейти к содержимому

MIME-типы

Расширения для электронной почты (Multipurpose Internet Mail Extensions), известные как MIME-тип, — это спецификация, расширяющая формат электронной почты и используемая браузерами и серверами для определения типа передаваемого контента. Спецификация стандартизирована в IETF RFC 6838. MIME-тип — это строка-идентификатор, а не расширение файла. Браузеры обычно используют MIME-тип (а не расширение файла) для определения способа обработки документа; поэтому важно правильно настроить серверы, чтобы они прикрепляли соответствующий MIME-тип к заголовку ответа. Если настройка выполнена неверно, браузеры могут неправильно интерпретировать содержимое файлов, и сайты будут работать некорректно. Также могут возникать проблемы с обработкой загруженных файлов.

Синтаксис

MIME-типы

text
Type/Subtype

Структура MIME-типа состоит из типа и подтипа, разделенных косой чертой (/), без пробелов. MIME-типы не чувствительны к регистру, но обычно пишутся строчными буквами.

MIME-тип всегда должен содержать как тип, так и подтип. Каждый тип имеет свой набор возможных подтипов.

Для предоставления дополнительных сведений можно использовать необязательный параметр.

MIME-типы

text
type/subtype;parameter=value

MIME-типы делятся на две категории: дискретные и составные. У каждой есть свои специфические подтипы.

Дискретные типы

MIME-типы

text
text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

Дискретные типы указывают на категорию документа. Они могут относиться к одной из следующих:

ТипОписаниеПримеры типичных подтипов
applicationСодержит двоичные данныеapplication/javascript, application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf
audioАудиофайлaudio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
fontДанные шрифтовfont/woff, font/ttf, font/otf
modelДанные моделей для 3D-объектовmodel/3mf, model/vrml
textТекстовый документtext/plain, text/html, text/css, text/javascript
videoВидеофайлvideo/webm, video/ogg

Для описания текстового документа, не относящегося к конкретному подтипу, используется text/plain. Документы, содержащие двоичные данные без конкретного подтипа, описываются с помощью application/octet-stream.

Составные типы

MIME-типы

text
multipart/form-data
multipart/byteranges

Составные типы указывают на документы, состоящие из нескольких частей, каждая из которых может иметь свой MIME-тип.

ТипОписаниеПримеры типичных подтипов
messageСообщение, содержащее другие сообщенияmessage/rfc822, message/partial
multipartДанные, состоящие из нескольких компонентовmultipart/form-data, multipart/byteranges

Распространённые MIME-типы

В следующей таблице приведены широко используемые современные MIME-типы. Многие устаревшие типы с префиксом x- (например, image/x-icon) признаны устаревшими и не рекомендуются к использованию в новых проектах. Полный авторитетный список см. в реестре IANA Media Types.

Расширение файлаТип медиа
.html, .htmtext/html
.csstext/css
.jsapplication/javascript
.jsonapplication/json
.pngimage/png
.jpg, .jpegimage/jpeg
.gifimage/gif
.svgimage/svg+xml
.mp3audio/mpeg
.mp4video/mp4
.pdfapplication/pdf
.zipapplication/zip

Установка заголовков Content-Type

Серверы должны отправлять правильный заголовок Content-Type, чтобы браузеры знали, как обрабатывать ответ. Ниже приведены быстрые примеры для распространённых сред:

Nginx

nginx
location /api/data {
    default_type application/json;
    add_header Content-Type application/json;
}

Apache (.htaccess)

apache
AddType application/json .json
AddType text/css .css

Node.js (Express)

javascript
app.get('/api/status', (req, res) => {
    res.setHeader('Content-Type', 'application/json');
    res.send(JSON.stringify({ status: 'ok' }));
});

Практика

Что такое MIME-типы и какова их функция?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.