Распространённые MIME-типы
Серверы и формы загрузки полагаются на эти строки; неверный тип может сломать предпросмотр, скачивание или CSP.
| Категория | MIME-тип | Типичное расширение |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| Простой текст | text/plain | .txt |
| CSV | text/csv | .csv |
| application/pdf | ||
| ZIP | application/zip | .zip |
| PNG | image/png | .png |
| JPEG | image/jpeg | .jpg |
| GIF | image/gif | .gif |
| WebP | image/webp | .webp |
| SVG | image/svg+xml | .svg |
| ICO | image/x-icon | .ico |
| MP3 | audio/mpeg | .mp3 |
| WAV | audio/wav | .wav |
| MP4 | video/mp4 | .mp4 |
| WebM | video/webm | .webm |
| WOFF2 | font/woff2 | .woff2 |
| Форма в URL-кодировке | application/x-www-form-urlencoded | — |
| Multipart-форма | multipart/form-data | — |
Примечания
- Некоторые браузеры «подглядывают» в содержимое, но сервер всё равно должен отдавать правильный тип.
- Официальный тип JS — text/javascript (application/javascript устарел).
Что на самом деле контролирует MIME-тип
MIME-тип — это метка, которую сервер добавляет к ответу, указывая браузеру, что собой представляют байты. text/html отображает страницу, application/pdf открывает файл в читалке, image/svg+xml может быть нарисован непосредственно на странице, а application/octet-stream запускает запрос на скачивание. Два файла, которые выглядят идентично, могут вести себя совершенно по-разному в зависимости от этого заголовка. Браузеры, формы загрузки, почтовые клиенты и правила безопасности контента все читают его, поэтому ошибка здесь — распространённая причина сломанных предпросмотров, принудительных скачиваний и заблокированных скриптов.
Где применяются text/ и application/
В старых рекомендациях говорилось, что JavaScript имеет тип application/javascript; однако текущий стандарт — text/javascript, а application/javascript считается устаревшим. CSS — это text/css, HTML — text/html, обычный текст — text/plain, а CSV — text/csv — всё категории text/*, потому что эти форматы задумывались как читаемые человеком. Структурированные форматы относятся к категории application/*: application/json, application/xml, application/pdf, application/zip. Исключение составляет SVG: это XML, но он должен отдаваться как image/svg+xml, чтобы браузер его отображал, а не скачивал.
Неверные типы ломают загрузку и безопасность
Неправильно помеченный файл при загрузке — классический источник ошибок: JSON-файл, отданный как text/plain, может быть отклонён клиентом API, изображение, возвращённое как octet-stream, начнёт скачиваться вместо отображения, а скрипт, отданный как text/html, будет заблокирован браузером. Строгие правила Content-Security-Policy опираются на MIME-тип, поэтому таблица стилей с неверным типом может быть полностью отклонена. Когда предпросмотр или скачивание ведут себя странно, проверка заголовка Content-Type в ответе обычно даёт самый быстрый диагноз.
Кодировка и определение типа по содержимому
Для текстовых типов MIME-тип нужно дополнять кодировкой: text/html; charset=utf-8 и application/json; charset=utf-8 — безопасные варианты для любого многоязычного контента. В старых браузерах использовалось определение типа по содержимому (content sniffing), когда браузер пытался угадать тип по байтам файла; этим злоупотребляли злоумышленники. Заголовок X-Content-Type-Options: nosniff указывает браузеру доверять заявленному типу. Всегда отправляйте явный и правильный Content-Type, а не полагайтесь на расширение файла — браузер его не видит.
Установка типов на сервере и в формах
То, откуда берётся тип, имеет значение. Статические хостинги автоматически сопоставляют расширения, но веб-фреймворкам часто требуется задавать его явно: в Express — через res.type('json'), в Nginx — через блок types, а на Cloudflare Pages — через заголовки или расширение файла. В HTML-формах атрибут enctype управляет кодировкой загрузки: multipart/form-data для файлов и application/x-www-form-urlencoded для обычных полей, тогда как API, ожидающий JSON, использует application/json. Отправка неверного типа — тихий источник ошибок 415 Unsupported Media Type и 400, которые выглядят загадочно, пока вы не проверите заголовок запроса.
Другие семейства, которые стоит знать
Помимо повседневных веб-форматов есть несколько семейств, которые стоит запомнить. Шрифты используют font/woff2 и font/ttf. Изображения разделяются по форматам — image/jpeg, image/png, image/webp, image/avif, image/gif, тогда как аудио и видео используют audio/mpeg, audio/ogg, video/mp4 и video/webm. Архивы и бинарные данные — application/zip, application/gzip и application/octet-stream. Когда API возвращает файл, который не может идентифицировать, octet-stream — честный ответ: он заставляет клиента скачать файл, а не гадать, что именно это такое. Это именно то поведение, которое требуется, когда содержание неизвестно.
Частые вопросы
- Какой MIME-тип использовать для файла .json?
- Для JSON-файлов и ответов API используйте application/json. Это стандартный тип, лучше отдавать в кодировке UTF-8.
- Какой MIME-тип у файлов .js?
- Официальный тип JavaScript — text/javascript. Устаревший application/javascript использовать не следует.
- Какой MIME-тип у изображения SVG?
- Файлы SVG используют image/svg+xml. Только с этим типом браузеры отображают SVG встроенно.