<-
Apache > HTTP 服务器 > 文档 > 2.4 版 > 模块

Apache 模块 mod_mime_magic

可用语言:  en  |  fr 

描述通过查看文件内容的前几个字节来确定文件的 MIME 类型
状态扩展
模块标识符mime_magic_module
源文件mod_mime_magic.c

摘要

此模块以与 Unix file(1) 命令相同的方式确定文件的 MIME 类型:它查看文件的前几个字节。它旨在作为 mod_mime 无法解析的案例的“第二道防线”。

此模块源自 Unix 的 file(1) 命令的免费版本,该命令使用“魔数”和文件内容中的其他提示来确定内容是什么。仅当 MimeMagicFile 指令指定了魔数文件时,此模块才处于活动状态。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

魔数文件的格式

文件内容是 4-5 列的纯 ASCII 文本。允许空白行,但会忽略。注释行使用井号 (#)。其余行将解析以下列

描述
1 开始检查的字节号
">" 表示依赖于之前的非 ">" 行
2

要匹配的数据类型

字节 单个字符
短整型 机器序 16 位整数
长整型 机器序 32 位整数
字符串 任意长度字符串
日期 长整型日期(自 Unix 纪元/1970 年以来的秒数)
beshort 大端序 16 位整数
belong 大端序 32 位整数
bedate 大端序 32 位整数日期
leshort 小端序 16 位整数
lelong 小端序 32 位整数
ledate 小端序 32 位整数日期
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

或者这些将识别包含 Microsoft Word 或 FrameMaker 文档的 *.doc 文件之间的区别。(这些是不兼容的文件格式,它们使用相同的文件后缀。)

# 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
top

性能问题

此模块不适合所有系统。如果您的系统勉强跟上负载,或者您正在执行 Web 服务器基准测试,您可能不想启用此模块,因为处理不是免费的。

但是,我们努力提高原始 file(1) 代码的性能,使其适合繁忙的 Web 服务器。它专为拥有数千个用户发布自己文档的服务器而设计。这在内部网中可能非常普遍。很多时候,如果服务器可以对文件的內容做出比文件名更明智的判断,这将非常有用……即使只是为了减少用户错误地命名自己的文件时出现的“为什么我的页面无法正常工作”的呼叫。您必须决定额外的工作是否适合您的环境。

top

注释

以下注释适用于 mod_mime_magic 模块,并在此处包含以符合贡献者的版权限制,这些限制要求对其进行确认。

mod_mime_magic:通过文件魔数进行 MIME 类型查找
版权所有 (c) 1996-1997 Cisco Systems, Inc.

Cisco Systems 于 1997 年 7 月将此软件提交给 Apache Group。此源代码的未来修订版和衍生版本必须确认 Cisco Systems 是此模块的原始贡献者。所有其他许可和使用条件均为 Apache Group 的条件。

此代码中的部分内容源自最初发布到 comp.sources.unix 的文件命令的免费版本。该程序的版权信息如下所示,这是必需的。

- 版权所有 (c) Ian F. Darwin,1987 年。由 Ian F. Darwin 编写。

此软件不受美国电话电报公司或加州大学理事会任何许可的约束。

任何人都被允许将此软件用于任何计算机系统上的任何目的,并自由地修改和重新分发它,但须遵守以下限制

  1. 作者不对使用此软件的后果负责,无论多么糟糕,即使它们是由其中的缺陷引起的。
  2. 此软件的来源不得被歪曲,无论是通过明确声明还是通过遗漏。由于很少有用户阅读源代码,因此必须在文档中列出版权信息。
  3. 修改后的版本必须明确标记为修改后的版本,并且不得被歪曲为原始软件。由于很少有用户阅读源代码,因此必须在文档中列出版权信息。
  4. 此通知不得被删除或更改。

为了符合 Darwin 先生的条款:这与免费的“文件”命令相比已发生了非常显著的修改。

  • 从一个版本的 Apache 迁移到下一个版本时,用于编译方便的单一文件。
  • 内存分配通过 Apache API 的池结构完成。
  • 所有函数都必须在必要时传递必要的 Apache API 请求或服务器结构,以便调用其他 Apache API 例程。(例如,通常用于日志记录、文件或内存分配本身或被调用的函数。)
  • struct magic 已从数组转换为单端链表,因为它一次只增长一条记录,它只按顺序访问,并且 Apache API 没有等效于 realloc()
  • 函数已更改为从服务器配置获取其参数,而不是全局变量。(它现在应该是可重入的,但尚未在多线程环境中进行测试。)
  • 以前将结果打印到 stdout 的位置现在将它们保存在一个列表中,该列表用于在 Apache 请求记录中设置 MIME 类型。
  • 命令行标志已删除,因为它们永远不会在此处使用。
top

MimeMagicFile 指令

描述使用指定的魔数文件启用基于文件内容的 MIME 类型确定
语法MimeMagicFile 文件路径
上下文服务器配置、虚拟主机
状态扩展
模块mod_mime_magic

MimeMagicFile 指令可用于启用此模块,默认文件分发在 conf/magic 中。非根路径相对于 ServerRoot。虚拟主机将使用与主服务器相同的文件,除非使用更具体的设置,在这种情况下,更具体的设置将覆盖主服务器的文件。

示例

MimeMagicFile conf/magic

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/不相关,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应直接发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表