Какой MIME-тип у файлов .js?
MIME-тип (тип медиаданных) для файлов JavaScript с расширением .js — text/javascript. Также можно встретить application/javascript. Тот же тип используется для .mjs. RFC 9239 (2022) сделал text/javascript официальным типом, а application/javascript по-прежнему принимается везде. ES-модули, загружаемые через <script type="module">, должны отдаваться с JavaScript MIME-типом, иначе браузер их заблокирует.
Заголовок Content-Type
Content-Type: text/javascript; charset=utf-8
Текстовые типы должны включать charset, чтобы браузер корректно декодировал символы.
Настройка сервера
| Сервер | Настройка |
|---|---|
Nginx (mime.types или types {}) | text/javascript js; |
Apache (.htaccess) | AddType text/javascript .js |
IIS (web.config) | <mimeMap fileExtension=".js" mimeType="text/javascript" /> |
| Node.js / Express | res.type('js') или res.setHeader('Content-Type', 'text/javascript; charset=utf-8') |
| Amazon S3 | Задайте Content-Type: text/javascript для объекта (метаданные) или передайте --content-type text/javascript в aws s3 cp |
Нужно ли сжимать файлы .js?
Да. JavaScript — это текст, поэтому включение gzip или Brotli для text/javascript обычно уменьшает объём передачи на 50–80 %. Убедитесь, что список сжимаемых типов на вашем сервере включает этот тип. Проверить это можно с помощью теста сжатия сайта.
Почему MIME-тип важен
Браузеры решают, что делать с ответом (отобразить, выполнить, воспроизвести или скачать), по заголовку Content-Type, а не по расширению файла. При X-Content-Type-Options: nosniff неверный тип приводит к тому, что таблицы стилей и скрипты полностью блокируются. Для загрузок никогда не доверяйте типу, который отправил клиент; проверяйте содержимое файла (его сигнатуру, magic bytes) на сервере.
Поиск MIME-типов
Поиск по всем распространённым расширениям файлов и MIME-типам с готовыми заголовками Content-Type для копирования.
Часто задаваемые вопросы
Какой MIME-тип у .js?
text/javascript. Встречающаяся альтернатива: application/javascript.Как задать Content-Type для .js в Nginx?
text/javascript js; указан в блоке types (обычно в /etc/nginx/mime.types), и перезагрузите Nginx.