MIME-типы
Расширения для электронной почты (Multipurpose Internet Mail Extensions), известные как MIME-тип, — это спецификация, расширяющая формат электронной почты и используемая браузерами и серверами для определения типа передаваемого контента. Спецификация стандартизирована в IETF RFC 6838. MIME-тип — это строка-идентификатор, а не расширение файла. Браузеры обычно используют MIME-тип (а не расширение файла) для определения способа обработки документа; поэтому важно правильно настроить серверы, чтобы они прикрепляли соответствующий MIME-тип к заголовку ответа. Если настройка выполнена неверно, браузеры могут неправильно интерпретировать содержимое файлов, и сайты будут работать некорректно. Также могут возникать проблемы с обработкой загруженных файлов.
Синтаксис
MIME-типы
Type/SubtypeСтруктура MIME-типа состоит из типа и подтипа, разделенных косой чертой (/), без пробелов. MIME-типы не чувствительны к регистру, но обычно пишутся строчными буквами.
MIME-тип всегда должен содержать как тип, так и подтип. Каждый тип имеет свой набор возможных подтипов.
Для предоставления дополнительных сведений можно использовать необязательный параметр.
MIME-типы
type/subtype;parameter=valueMIME-типы делятся на две категории: дискретные и составные. У каждой есть свои специфические подтипы.
Дискретные типы
MIME-типы
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-типы
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, .htm | text/html |
.css | text/css |
.js | application/javascript |
.json | application/json |
.png | image/png |
.jpg, .jpeg | image/jpeg |
.gif | image/gif |
.svg | image/svg+xml |
.mp3 | audio/mpeg |
.mp4 | video/mp4 |
.pdf | application/pdf |
.zip | application/zip |
Установка заголовков Content-Type
Серверы должны отправлять правильный заголовок Content-Type, чтобы браузеры знали, как обрабатывать ответ. Ниже приведены быстрые примеры для распространённых сред:
Nginx
location /api/data {
default_type application/json;
add_header Content-Type application/json;
}Apache (.htaccess)
AddType application/json .json
AddType text/css .cssNode.js (Express)
app.get('/api/status', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ status: 'ok' }));
});Практика
Что такое MIME-типы и какова их функция?