mirror of
				https://github.com/apache/httpd.git
				synced 2025-10-31 19:10:37 +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>
 | |
| 
 |