Що таке MIME-тип насправді
MIME-тип, також відомий як медіатип, — це коротка мітка, що повідомляє програмному забезпеченню, який вид даних містить файл або тіло повідомлення. Він з'явився в електронній пошті (назва розшифровується як Multipurpose Internet Mail Extensions — багатоцільові розширення інтернет-пошти), але сьогодні зустрічається повсюди у вебі. Формат завжди виглядає як тип/підтип: широка категорія, скісна риска та конкретний формат. Таким чином, text/html означає «текст у форматі HTML», image/png — «зображення у форматі PNG», а application/json — «прикладні дані, закодовані як JSON».
Верхній рівень типу береться з фіксованого переліку, що підтримується IANA, офіційним реєстром: text, image, audio, video, application, font, model, multipart та кілька новіших, як-от haptics. Підтип — це конкретний формат. Виробники можуть додавати власні з префіксом vnd. (наприклад, application/vnd.ms-excel), а для експериментальних типів історично використовувався префікс x-, хоча ця угода нині не рекомендується.

Де важливі MIME-типи
Найважливіше місце, де з'являється MIME-тип, — це HTTP-заголовок відповіді Content-Type. Коли сервер надсилає сторінку, зображення або відповідь API, цей заголовок повідомляє браузеру, як інтерпретувати байти. Якщо заголовок містить text/html, браузер відображає розмітку; якщо application/json — виклик fetch() може розібрати відповідь; якщо application/pdf — відкривається вбудований переглядач. Той самий заголовок передається і з боку запиту: коли ви відправляєте форму або тіло запиту API методом POST, Content-Type повідомляє серверу, як читати надіслане.
Крім HTTP, MIME-типи керують кількома іншими системами. Поштові клієнти використовують їх, щоб вирішити, чи є вкладення зображенням для попереднього перегляду, чи двійковим файлом для збереження. Обробники завантажень файлів перевіряють задекларований тип, щоб прийняти або відхилити файли. Операційна система або браузер використовує тип, а не лише розширення файлу, для вибору програми за замовчуванням. Та сама ідея лежить в основі того, як сервери повідомляють результати та помилки разом із HTTP-кодами статусу — відповідь 200 із неправильним типом може бути такою ж зламаною, як і 404.
Ті, що використовуються щодня
Кілька типів охоплюють переважну більшість реального трафіку:
text/html— веб-сторінки (розширення.html)text/css— таблиці стилів (.css)text/javascript— рекомендований тип для JavaScript (.js,.mjs)application/json— єдиний офіційний тип JSON, визначений у RFC 8259 (.json)image/png,image/jpeg,image/webp,image/svg+xml— поширені формати зображеньapplication/pdf— документи PDF (.pdf)application/octet-stream— загальний тип для невідомих або довільних двійкових данихtext/plain— стандартний тип для простого тексту без більш конкретного типу
JSON заслуговує окремої примітки, бо тут часто трапляються помилки. Єдиний правильний тип — application/json. Старіший код іноді використовував text/json, text/plain або application/x-javascript, але вони застаріли, й деякі клієнти відмовляться їх розбирати. Параметр charset для JSON також не потрібен — специфікація вимагає UTF-8, тому запис application/json; charset=utf-8 є надлишковим, хоча й нешкідливим. Повнішу таблицю форматів і розширень дивіться в наших довідкових таблицях.

Чому неправильний Content-Type ламає роботу
Браузери та клієнти довіряють задекларованому типу, тому помилка в ньому має конкретні наслідки. Надішліть відповідь JSON API як text/html — і браузер може спробувати відобразити її як розмітку, або суворий клієнт видасть помилку розбору до того, як ваш код взагалі запрацює. Надішліть файл CSS або JavaScript із неправильним типом — і функція безпеки X-Content-Type-Options: nosniff змусить браузер відмовитися від його застосування, мовчки зламавши стилі або скрипти сторінки.
Завантаження файлів — ще одна класична точка відмови. Якщо ви хочете, щоб файл завантажувався, а не відображався, тип має значення нарівні із заголовком Content-Disposition. PDF, надісланий як application/octet-stream, завантажується як звичайний файл замість відкриття у переглядачі; зображення, надіслане як text/plain, відображається як набір нечитабельних символів. З боку завантаження неправильно позначений файл може обійти наївну перевірку розширення — саме тому надійні валідатори перевіряють реальні байти («магічне число»), а не покладаються на тип, вказаний клієнтом.
Історично браузери намагалися вгадати, або «нюхати», справжній тип, якщо заголовок виглядав неправильно. Така поведінка призводила до дірок у безпеці, тому сучасна найкраща практика — завжди надсилати точний Content-Type та вимикати снifфінг за допомогою nosniff. Коротко: навмисно встановлюйте тип для кожної відповіді — і більшість помилок відображення, завантаження та розбору зникнуть самі собою.
Часті запитання
У чому різниця між MIME-типом і медіатипом?
Це одне й те саме. «MIME-тип» — це стара назва з часів електронної пошти, а «медіатип» — термін, якому надають перевагу IANA та сучасні специфікації HTTP. Обидва позначають мітку тип/підтип.
Який правильний MIME-тип для JSON?
Це application/json, визначений у RFC 8259. Застарілі варіанти, як-от text/json або application/x-javascript, більше не актуальні, і деякі клієнти відхилять їх.
Що означає application/octet-stream?
Це загальний тип для довільних двійкових даних без більш конкретної мітки. Сервери використовують його як запасний варіант для невідомих типів файлів, що зазвичай ініціює завантаження замість відображення у браузері.
Чому мій файл CSS або JavaScript не завантажується?
Часто сервер надсилає його з неправильним Content-Type. Якщо встановлено X-Content-Type-Options зі значенням nosniff, браузер відмовляється застосовувати CSS, що не є text/css, або скрипти, що не є типом JavaScript. Виправте конфігурацію сервера, щоб надсилався правильний тип.
Чи можна додати charset до MIME-типу?
Так, для текстових форматів, використовуючи параметр на зразок text/html; charset=utf-8. Для JSON це зайве, оскільки формат завжди є UTF-8 за специфікацією, хоча додавання charset і не шкодить.
Чи визначає розширення файлу MIME-тип?
Не у HTTP. Сервер вирішує, який Content-Type надсилати, і браузер довіряє цьому заголовку. Розширення служить лише підказкою для інструментів та операційних систем, коли явний тип не вказано.
