Какой MIME-тип у файлов .xlsx?
MIME-тип (тип медиаданных) для файлов Microsoft Excel с расширением .xlsx — application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Это ZIP-архив с XML-файлами, он уже сжат. Отдавайте файлы именно с этим типом, чтобы браузер сохранял расширение .xlsx при скачивании.
Заголовок Content-Type
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8
Текстовые типы должны включать charset, чтобы браузер корректно декодировал символы.
Настройка сервера
| Сервер | Настройка |
|---|---|
Nginx (mime.types или types {}) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; |
Apache (.htaccess) | AddType application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx |
IIS (web.config) | <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /> |
| Node.js / Express | res.type('xlsx') или res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8') |
| Amazon S3 | Установите Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet для объекта (метаданные) или передайте --content-type application/vnd.openxmlformats-officedocument.spreadsheetml.sheet в aws s3 cp |
Нужно ли сжимать файлы .xlsx?
Нет. Файлы Microsoft Excel уже сжаты внутри, поэтому gzip или Brotli лишь расходуют процессорное время и почти не уменьшают размер, а иногда даже увеличивают его. Не включайте application/vnd.openxmlformats-officedocument.spreadsheetml.sheet в настройки сжатия.
Зачем нужен MIME-тип
Браузеры решают, что делать с ответом (отобразить, выполнить, воспроизвести или скачать), по заголовку Content-Type, а не по расширению файла. При X-Content-Type-Options: nosniff неверный тип приводит к тому, что таблицы стилей и скрипты полностью блокируются. Для загрузки файлов никогда не доверяйте типу, который отправил клиент; проверяйте содержимое файла (его сигнатуру, magic bytes) на сервере.
Поиск MIME-типов
Ищите среди всех распространённых расширений файлов и MIME-типов, с готовыми заголовками Content-Type для копирования.
Часто задаваемые вопросы
Какой MIME-тип у .xlsx?
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.Как задать Content-Type для .xlsx в Nginx?
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; есть в блоке types (обычно в файле /etc/nginx/mime.types), и перезагрузите Nginx.