Модуль Apache mod_mime_magic
| Описание: | Определяет тип MIME файла, анализируя несколько байтов его содержимого |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | mime_magic_module |
| Файл источника: | mod_mime_magic.c |
Краткое описание
Этот модуль определяет тип MIME файлов таким же образом, как работает команда Unix file(1): он анализирует первые несколько байтов файла. Он предназначен в качестве «второй линии защиты» для случаев, когда mod_mime не может определить тип.
Этот модуль получен из свободной версии команды file(1) для Unix, которая использует «магические числа» и другие подсказки из содержимого файла, чтобы определить, что это за содержимое. Данный модуль активен только в том случае, если файл с магическими числами указан директивой MimeMagicFile.
Формат файла с магическими числами
Содержимое файла представляет собой обычный текст ASCII в 4-5 столбцах. Разрешены и игнорируются пустые строки. Комментированные строки начинаются с символа решётки (#). Остальные строки анализируются для следующих столбцов:
| Столбец | Описание | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | номер байта, с которого начинается проверка " >" указывает зависимость от предыдущей строки, не являющейся ">" |
||||||||||||||||||||||
| 2 |
тип данных для сопоставления
|
||||||||||||||||||||||
| 3 | содержимое данных для сопоставления | ||||||||||||||||||||||
| 4 | тип MIME при совпадении | ||||||||||||||||||||||
| 5 | кодировка MIME при совпадении (необязательно) |
Например, следующие строки файла с магическими числами распознают некоторые аудиоформаты:
# 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 с помощью магических чисел файла
Авторские права (c) 1996-1997 Cisco Systems, Inc.
Эта программа была представлена компанией Cisco Systems в группу Apache в июле 1997 года. В будущих пересмотрах и производных этого исходного кода необходимо признавать компанию Cisco Systems в качестве первоначального участника разработки этого модуля. Все остальные лицензионные и условия использования соответствуют группе Apache.
Часть этого кода взята из свободной версии команды «file», первоначально размещенной на форуме comp.sources.unix. Ниже приводится информация об авторских правах этой программы, как требуется.
- Авторские права (c) Ian F. Darwin, 1987. Написано Ian F. Darwin.
Данное программное обеспечение не подчиняется никакой лицензии American Telephone and Telegraph Company или Regents of the University of California.
Любому разрешено использовать это программное обеспечение для любых целей на любой компьютерной системе, изменять и свободно распространять его при соблюдении следующих ограничений:
- Автор не несёт ответственности за последствия использования этого программного обеспечения, какими бы ужасными они ни были, даже если они возникли из-за его недостатков.
- Происхождение этого программного обеспечения не должно быть искажено, ни явным заявлением, ни упущением. Так как мало кто читает исходники, информация об авторах должна быть в документации.
- Изменённые версии должны быть явно отмечены как такие, и не должны выдаваться за оригинальное программное обеспечение. Так как мало кто читает исходники, информация об авторах должна быть в документации.
- Это уведомление не должно быть удалено или изменено.
Для соблюдения условий г-на Дарвина: этот код был существенно изменён по сравнению со свободной командой «file».
- все в одном файле для удобства компиляции при переходе с одной версии Apache на другую.
- Выделение памяти выполняется через структуру пула API Apache.
- Все функции получили необходимые запросы API Apache или структуры сервера, чтобы вызывать другие функции API Apache. (т.е., обычно для ведения журналов, файлов или выделения памяти в самой функции или вызываемой функции.)
- Структура magic была преобразована из массива в односвязный список, поскольку она увеличивается только на одну запись за раз, доступ к ней осуществляется только последовательно, и API Apache не имеет эквивалента
realloc(). - Функции были изменены для получения параметров из конфигурации сервера, а не из глобальных переменных. (Теперь она должна быть реентерабельной, но не тестировалась в многопоточной среде.)
- Места, где ранее результаты печатались в стандартный вывод, теперь сохраняются в списке, где они используются для установки типа MIME в записи запроса Apache.
- Флаги командной строки были удалены, так как они никогда не будут использоваться здесь.
Директива MimeMagicFile
| Описание: | Включение определения типа MIME на основе содержимого файла с использованием указанного файла магических чисел |
|---|---|
| Синтаксис: | 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