mirror of
https://github.com/apache/httpd.git
synced 2025-05-17 15:21:13 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@86350 13f79535-47bb-0310-9956-ffa450edef68
290 lines
10 KiB
HTML
290 lines
10 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>Apache module mod_mime_magic</TITLE>
|
|
</HEAD>
|
|
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
|
|
<BODY
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#000080"
|
|
ALINK="#FF0000"
|
|
>
|
|
<DIV ALIGN="CENTER">
|
|
<IMG SRC="../images/sub.gif" ALT="[APACHE DOCUMENTATION]">
|
|
</DIV>
|
|
|
|
<H1 align="CENTER">Module mod_mime_magic</H1>
|
|
|
|
<p>This module provides for determining the MIME type of a file by
|
|
looking at a few bytes of its contents.</p>
|
|
|
|
<P><A
|
|
HREF="module-dict.html#Status"
|
|
REL="Help"
|
|
><STRONG>Status:</STRONG></A> Extension
|
|
<BR>
|
|
<A
|
|
HREF="module-dict.html#SourceFile"
|
|
REL="Help"
|
|
><STRONG>Source File:</STRONG></A> mod_mime_magic.c
|
|
<BR>
|
|
<A
|
|
HREF="module-dict.html#ModuleIdentifier"
|
|
REL="Help"
|
|
><STRONG>Module Identifier:</STRONG></A> mime_magic_module
|
|
</P>
|
|
|
|
|
|
|
|
<H2>Summary</H2>
|
|
|
|
<p>This module determines the MIME type of files in the same way the
|
|
Unix file(1) command works: it looks at the first few bytes of
|
|
the file. It is intended as a "second line of defense" for cases
|
|
that <a href="mod_mime.html">mod_mime</a> can't resolve. To assure
|
|
that mod_mime gets first try at determining a file's MIME type,
|
|
be sure to list mod_mime_magic <STRONG>before</STRONG> mod_mime
|
|
in the configuration.
|
|
|
|
<p>This module is derived from a free version of the
|
|
<CODE>file(1)</CODE> command for Unix, which uses "magic numbers"
|
|
and other hints from a file's contents to figure out what the
|
|
contents are. This module is active only if the magic file is
|
|
specified by the <A
|
|
HREF="#mimemagicfile"><CODE>MimeMagicFile</CODE></A> directive.
|
|
|
|
|
|
<H2>Directives</H2>
|
|
<P>
|
|
<UL>
|
|
<LI><A HREF="#mimemagicfile">MimeMagicFile</A>
|
|
</LI>
|
|
</UL>
|
|
</P>
|
|
|
|
<h2>Format of the Magic File</h2>
|
|
|
|
<P>
|
|
The contents of the file are plain ASCII text in 4-5 columns.
|
|
Blank lines are allowed but ignored.
|
|
Commented lines use a hash mark "#".
|
|
The remaining lines are parsed for the following columns:
|
|
<table border=1>
|
|
<tr valign=top>
|
|
<TH>Column</TH>
|
|
<TH>Description</TH>
|
|
</TR>
|
|
<tr valign=top>
|
|
<TD>1</TD>
|
|
<TD>byte number to begin checking from
|
|
<BR>
|
|
">" indicates a dependency upon the previous non-">" line</TD>
|
|
</TR><tr valign=top>
|
|
<TD>2</TD>
|
|
<TD>type of data to match
|
|
<table border=1>
|
|
<TR><TD>byte</TD><TD>single character</TD></TR>
|
|
<TR><TD>short</TD><TD>machine-order 16-bit integer</TD></TR>
|
|
<TR><TD>long</TD><TD>machine-order 32-bit integer</TD></TR>
|
|
<TR><TD>string</TD><TD>arbitrary-length string</TD></TR>
|
|
<TR><TD>date</TD><TD>long integer date
|
|
(seconds since Unix epoch/1970)</TD></TR>
|
|
<TR><TD>beshort</TD><TD>big-endian 16-bit integer</TD></TR>
|
|
<TR><TD>belong</TD><TD>big-endian 32-bit integer</TD></TR>
|
|
<TR><TD>bedate</TD><TD>big-endian 32-bit integer date</TD></TR>
|
|
<TR><TD>leshort</TD><TD>little-endian 16-bit integer</TD></TR>
|
|
<TR><TD>lelong</TD><TD>little-endian 32-bit integer</TD></TR>
|
|
<TR><TD>ledate</TD><TD>little-endian 32-bit integer date</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
</TR><tr valign=top>
|
|
<TD>3</TD>
|
|
<TD>contents of data to match</TD>
|
|
</TR><tr valign=top>
|
|
<TD>4</TD>
|
|
<TD>MIME type if matched</TD>
|
|
</TR><tr valign=top>
|
|
<TD>5</TD>
|
|
<TD>MIME encoding if matched (optional)</TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<P>
|
|
For example, the following magic file lines
|
|
would recognize some audio formats.
|
|
|
|
<PRE>
|
|
# 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
|
|
</PRE>
|
|
|
|
Or these would recognize the difference between "*.doc" files containing
|
|
Microsoft Word or FrameMaker documents. (These are incompatible file
|
|
formats which use the same file suffix.)
|
|
|
|
<PRE>
|
|
# 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
|
|
</PRE>
|
|
|
|
An optional MIME encoding can be included as a fifth column.
|
|
For example, this can recognize gzipped files and set the encoding
|
|
for them.
|
|
|
|
<PRE>
|
|
# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
|
|
0 string \037\213 application/octet-stream x-gzip
|
|
</PRE>
|
|
|
|
<H2>Performance Issues</H2>
|
|
|
|
This module is not for every system. If your system is barely keeping
|
|
up with its load or if you're performing a web server benchmark,
|
|
you may not want to enable this because the processing is not free.
|
|
<P>
|
|
However, an effort was made to improve the performance of the original
|
|
file(1) code to make it fit in a busy web server.
|
|
It was designed for a server where there are thousands of users who
|
|
publish their own documents.
|
|
This is probably very common on intranets.
|
|
Many times, it's helpful
|
|
if the server can make more intelligent decisions about a file's
|
|
contents than the file name allows
|
|
...even if just to reduce the "why doesn't my page work" calls
|
|
when users improperly name their own files.
|
|
You have to decide if the extra work suits your environment.
|
|
<P>
|
|
When compiling an Apache server, this module should be at or near the
|
|
top of the list of modules in the Configuration file. The modules are
|
|
listed in increasing priority so that will mean this one is used only
|
|
as a last resort, just like it was designed to.
|
|
|
|
<H2><A NAME="notes">Notes</A></H2>
|
|
|
|
The following notes apply to the mod_mime_magic module and are
|
|
included here for compliance with contributors' copyright restrictions
|
|
that require their acknowledgment.
|
|
|
|
<PRE>
|
|
/*
|
|
* mod_mime_magic: MIME type lookup via file magic numbers
|
|
* Copyright (c) 1996-1997 Cisco Systems, Inc.
|
|
*
|
|
* This software was submitted by Cisco Systems to the Apache Group in July
|
|
* 1997. Future revisions and derivatives of this source code must
|
|
* acknowledge Cisco Systems as the original contributor of this module.
|
|
* All other licensing and usage conditions are those of the Apache Group.
|
|
*
|
|
* Some of this code is derived from the free version of the file command
|
|
* originally posted to comp.sources.unix. Copyright info for that program
|
|
* is included below as required.
|
|
* ---------------------------------------------------------------------------
|
|
* - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
|
|
*
|
|
* This software is not subject to any license of the American Telephone and
|
|
* Telegraph Company or of the Regents of the University of California.
|
|
*
|
|
* Permission is granted to anyone to use this software for any purpose on any
|
|
* computer system, and to alter it and redistribute it freely, subject to
|
|
* the following restrictions:
|
|
*
|
|
* 1. The author is not responsible for the consequences of use of this
|
|
* software, no matter how awful, even if they arise from flaws in it.
|
|
*
|
|
* 2. The origin of this software must not be misrepresented, either by
|
|
* explicit claim or by omission. Since few users ever read sources, credits
|
|
* must appear in the documentation.
|
|
*
|
|
* 3. Altered versions must be plainly marked as such, and must not be
|
|
* misrepresented as being the original software. Since few users ever read
|
|
* sources, credits must appear in the documentation.
|
|
*
|
|
* 4. This notice may not be removed or altered.
|
|
* -------------------------------------------------------------------------
|
|
*
|
|
* For compliance with Mr Darwin's terms: this has been very significantly
|
|
* modified from the free "file" command.
|
|
* - all-in-one file for compilation convenience when moving from one
|
|
* version of Apache to the next.
|
|
* - Memory allocation is done through the Apache API's pool structure.
|
|
* - All functions have had necessary Apache API request or server
|
|
* structures passed to them where necessary to call other Apache API
|
|
* routines. (<EM>i.e.</EM>, usually for logging, files, or memory allocation in
|
|
* itself or a called function.)
|
|
* - struct magic has been converted from an array to a single-ended linked
|
|
* list because it only grows one record at a time, it's only accessed
|
|
* sequentially, and the Apache API has no equivalent of realloc().
|
|
* - Functions have been changed to get their parameters from the server
|
|
* configuration instead of globals. (It should be reentrant now but has
|
|
* not been tested in a threaded environment.)
|
|
* - Places where it used to print results to stdout now saves them in a
|
|
* list where they're used to set the MIME type in the Apache request
|
|
* record.
|
|
* - Command-line flags have been removed since they will never be used here.
|
|
*
|
|
*/
|
|
</PRE>
|
|
|
|
<HR>
|
|
<H2><A NAME="mimemagicfile">
|
|
MimeMagicFile
|
|
</A></H2>
|
|
<P>
|
|
<A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> MimeMagicFile <EM>magic-file-name</EM>
|
|
<BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> none
|
|
<BR>
|
|
<A
|
|
HREF="directive-dict.html#Context"
|
|
REL="Help"
|
|
><STRONG>Context:</STRONG></A> server config, virtual host
|
|
<BR>
|
|
<A
|
|
HREF="directive-dict.html#Status"
|
|
REL="Help"
|
|
><STRONG>Status:</STRONG></A> Extension
|
|
<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mod_mime_magic
|
|
<P>
|
|
|
|
The <CODE>MimeMagicFile</CODE> directive can be used to enable this module,
|
|
the default file is distributed at <CODE>conf/magic</CODE>.
|
|
Non-rooted paths are relative to the ServerRoot. Virtual hosts
|
|
will use the same file as the main server unless a more specific setting
|
|
is used, in which case the more specific setting overrides the main server's
|
|
file.
|
|
<P>
|
|
|
|
</BODY>
|
|
</HTML>
|