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

Серверы и формы загрузки полагаются на эти строки; неверный тип может сломать предпросмотр, скачивание или CSP.

Обновлено:

КатегорияMIME-типТипичное расширение
HTMLtext/html.html
CSStext/css.css
JavaScripttext/javascript.js
JSONapplication/json.json
XMLapplication/xml.xml
Простой текстtext/plain.txt
CSVtext/csv.csv
PDFapplication/pdf.pdf
ZIPapplication/zip.zip
PNGimage/png.png
JPEGimage/jpeg.jpg
GIFimage/gif.gif
WebPimage/webp.webp
SVGimage/svg+xml.svg
ICOimage/x-icon.ico
MP3audio/mpeg.mp3
WAVaudio/wav.wav
MP4video/mp4.mp4
WebMvideo/webm.webm
WOFF2font/woff2.woff2
Форма в URL-кодировкеapplication/x-www-form-urlencoded—
Multipart-формаmultipart/form-data—

Примечания

Что на самом деле контролирует 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 встроенно.

Источники