mirror of
				https://github.com/apache/httpd.git
				synced 2025-11-03 17:53:20 +03:00 
			
		
		
		
	git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91116 13f79535-47bb-0310-9956-ffa450edef68
		
			
				
	
	
		
			330 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 | 
						|
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | 
						|
 | 
						|
<html xmlns="http://www.w3.org/1999/xhtml">
 | 
						|
  <head>
 | 
						|
    <meta name="generator" content="HTML Tidy, see www.w3.org" />
 | 
						|
 | 
						|
    <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>
 | 
						|
 | 
						|
    <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.</p>
 | 
						|
 | 
						|
    <h2>Directives</h2>
 | 
						|
 | 
						|
    <ul>
 | 
						|
      <li><a href="#mimemagicfile">MimeMagicFile</a></li>
 | 
						|
    </ul>
 | 
						|
    <br />
 | 
						|
     <br />
 | 
						|
     
 | 
						|
 | 
						|
    <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:</p>
 | 
						|
 | 
						|
    <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.</p>
 | 
						|
<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>
 | 
						|
 | 
						|
    <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.</p>
 | 
						|
 | 
						|
    <h2><a id="notes" 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 id="mimemagicfile"
 | 
						|
    name="mimemagicfile">MimeMagicFile</a></h2>
 | 
						|
 | 
						|
    <p><a href="directive-dict.html#Syntax"
 | 
						|
    rel="Help"><strong>Syntax:</strong></a> MimeMagicFile
 | 
						|
    <em>file-path</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>
 | 
						|
 | 
						|
    <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>
 | 
						|
 |