Модуль Apache mod_mime_magic
| Описание: | Определяет тип MIME файла, анализируя несколько байтов его содержимого |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | mime_magic_module |
| Исходный файл: | mod_mime_magic.c |
Краткое описание
Этот модуль определяет тип MIME файлов так же, как это делает команда file(1) в Unix: она анализирует первые несколько байтов файла. Модуль предназначен для «второй линии защиты» в случаях, которые не может разрешить mod_mime.
Этот модуль создан на основе свободной версии команды file(1) для Unix, которая использует «магические числа» и другие подсказки из содержимого файла, чтобы определить, что в нём содержится. Модуль активен только в том случае, если файл magic указан директивой MimeMagicFile.
Формат файла magic
Содержимое файла представляет собой обычный текст ASCII в 4–5 столбцах. Пустые строки допускаются, но игнорируются. Строки комментариев начинаются со знака решётки (#). В остальных строках анализируются следующие столбцы:
| Столбец | Описание | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | номер байта, с которого начинается проверка « >» означает зависимость от предыдущей строки, не начинающейся с «>» |
||||||||||||||||||||||
| 2 |
тип данных для сравнения
|
||||||||||||||||||||||
| 3 | содержимое данных для сравнения | ||||||||||||||||||||||
| 4 | тип MIME при совпадении | ||||||||||||||||||||||
| 5 | кодировка MIME при совпадении (необязательно) |
Например, следующие строки файла magic распознают некоторые аудиоформаты:
# Sun/NeXT audio data 0 string .snd >12 belong 1 audio/basic >12 belong 2 audio/basic >12 belong 3 audio/basic >12 belong 4 audio/basic >12 belong 5 audio/basic >12 belong 6 audio/basic >12 belong 7 audio/basic >12 belong 23 audio/x-adpcm
Или следующие строки распознают различия между файлами *.doc, содержащими документы Microsoft Word или FrameMaker. (Это несовместимые форматы файлов с одинаковым расширением.)
# Frame 0 string \<MakerFile application/x-frame 0 string \<MIFFile application/x-frame 0 string \<MakerDictionary application/x-frame 0 string \<MakerScreenFon application/x-frame 0 string \<MML application/x-frame 0 string \<Book application/x-frame 0 string \<Maker application/x-frame # MS-Word 0 string \376\067\0\043 application/msword 0 string \320\317\021\340\241\261 application/msword 0 string \333\245-\0\0\0 application/msword
В качестве пятого столбца можно указать необязательную кодировку MIME. Например, это позволяет распознавать файлы gzip и задавать для них кодировку.
# gzip (GNU zip, not to be confused with # [Info-ZIP/PKWARE] zip archiver) 0 string \037\213 application/octet-stream x-gzip
Вопросы производительности
Этот модуль подходит не для каждой системы. Если ваша система с трудом справляется с нагрузкой или вы проводите тестирование производительности веб-сервера, возможно, вам не стоит включать этот модуль, поскольку обработка требует дополнительных ресурсов.
Тем не менее были предприняты усилия для повышения производительности исходного кода file(1), чтобы его можно было использовать на нагруженном веб-сервере. Он разрабатывался для сервера, на котором тысячи пользователей публикуют собственные документы. Такая ситуация часто встречается во внутренних сетях. Во многих случаях полезно, если сервер может принимать более обоснованные решения о содержимом файла, чем позволяет его имя... хотя бы для того, чтобы сократить количество обращений «почему моя страница не работает», когда пользователи неправильно называют свои файлы. Вам следует решить, подходит ли такая дополнительная нагрузка для вашей среды.
Примечания
Следующие примечания относятся к модулю mod_mime_magic и включены сюда для соблюдения ограничений авторских прав участников, требующих указания авторства.
mod_mime_magic: определение типа MIME по магическим числам файла
Copyright (c) 1996-1997 Cisco Systems, Inc.
Это программное обеспечение было передано компанией Cisco Systems группе Apache в июле 1997 года. В последующих редакциях и производных версиях этого исходного кода необходимо указывать Cisco Systems как первоначального автора данного модуля. Все остальные условия лицензирования и использования соответствуют условиям группы Apache.
Часть этого кода основана на свободной версии команды file, первоначально опубликованной в comp.sources.unix. Ниже приводятся сведения об авторских правах на эту программу, как того требуют условия.
- Copyright (c) Ian F. Darwin, 1987. Автор: Ian F. Darwin.
На это программное обеспечение не распространяются лицензии American Telephone and Telegraph Company или попечительского совета Калифорнийского университета.
Любому лицу разрешается использовать это программное обеспечение в любых целях на любой компьютерной системе, а также свободно изменять и распространять его при соблюдении следующих ограничений:
- Автор не несёт ответственности за последствия использования этого программного обеспечения, какими бы серьёзными они ни были, даже если они возникли из-за его недостатков.
- Запрещается искажать происхождение этого программного обеспечения, прямо заявляя о неверном авторстве или умалчивая о нём. Поскольку исходный код читают немногие пользователи, сведения об авторстве должны быть указаны в документации.
- Изменённые версии должны быть чётко обозначены как таковые; запрещается выдавать их за исходное программное обеспечение. Поскольку исходный код читают немногие пользователи, сведения об авторстве должны быть указаны в документации.
- Это уведомление нельзя удалять или изменять.
Для соблюдения условий г-на Дарвина: эта программа была значительно изменена по сравнению со свободной командой «file».
- Все файлы объединены в один для удобства компиляции при переходе с одной версии Apache на следующую.
- Выделение памяти выполняется с помощью структуры пулов API Apache.
- Во все функции при необходимости передаются необходимые структуры запроса или сервера API Apache, чтобы можно было вызывать другие процедуры API Apache. (то есть, обычно для ведения журнала, работы с файлами или выделения памяти самой функцией либо вызываемой ею функцией.)
- struct magic преобразована из массива в односвязный список, поскольку он растёт только на одну запись за раз, доступ к нему осуществляется только последовательно, а в API Apache нет аналога
realloc(). - Функции изменены так, чтобы получать параметры из конфигурации сервера, а не из глобальных переменных. (Теперь код должен быть реентерабельным, но это не проверялось в многопоточной среде.)
- Вместо вывода результатов в stdout, как это делалось раньше, они теперь сохраняются в списке, используемом для установки типа MIME в записи запроса Apache.
- Флаги командной строки удалены, поскольку здесь они никогда не будут использоваться.
Директива MimeMagicFile
| Описание: | Включает определение типа MIME на основе содержимого файла с помощью указанного файла magic |
|---|---|
| Синтаксис: | MimeMagicFile file-path |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_mime_magic |
Директиву MimeMagicFile можно использовать для включения этого модуля; файл по умолчанию предоставляется в conf/magic. Пути без корневого каталога отсчитываются относительно ServerRoot. Виртуальные хосты используют тот же файл, что и основной сервер, если не задана более конкретная настройка; в этом случае более конкретная настройка переопределяет файл основного сервера.
Пример
MimeMagicFile conf/magic
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_mime_magic.html