<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Terms Used to Describe Modules - Apache HTTP Server Version 2.5</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>Terms Used to Describe Modules</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/mod/module-dict.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/module-dict.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/module-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/module-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/module-dict.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>

   <p>This document describes the terms that are used to describe
    each Apache <a href="./">module</a>.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">Description</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Status">Status</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#SourceFile">Source File</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#ModuleIdentifier">Module Identifier</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">Compatibility</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Description" id="Description">Description</a> <a title="Permanent link" href="#Description" class="permalink">&para;</a></h2>

<p>A brief description of the purpose of the module.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Status" id="Status">Status</a> <a title="Permanent link" href="#Status" class="permalink">&para;</a></h2>

    <p>This indicates how tightly bound into the Apache Web server
    the module is; in other words, you may need to recompile the
    server in order to gain access to the module and its
    functionality. Possible values for this attribute are:</p>

    <dl>
      <dt>MPM</dt>

      <dd>A module with status "MPM" is a <a href="../mpm.html">Multi-Processing Module</a>. Unlike the
      other types of modules, Apache must have one and only one MPM
      in use at any time. This type of module is responsible for
      basic request handling and dispatching.</dd>

      <dt>Base</dt>

      <dd>A module labeled as having "Base" status is compiled and
      loaded into the server by default, and is therefore normally
      available unless you have taken steps to remove the module
      from your configuration.</dd>

      <dt>Extension</dt>

      <dd>A module with "Extension" status is not normally compiled
      and loaded into the server. To enable the module and its
      functionality, you may need to change the server build
      configuration files and re-compile Apache.</dd>

      <dt>Experimental</dt>

      <dd>"Experimental" status indicates that the module is
      available as part of the Apache kit, but you are on your own
      if you try to use it. The module is being documented for
      completeness, and is not necessarily supported.</dd>

      <dt>External</dt>

      <dd>Modules which are not included with the base Apache
      distribution ("third-party modules") may use the "External"
      status. We are not responsible for, nor do we support such
      modules.</dd>
    </dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="SourceFile" id="SourceFile">Source File</a> <a title="Permanent link" href="#SourceFile" class="permalink">&para;</a></h2>

    <p>This quite simply lists the name of the source file which
    contains the code for the module. This is also the name used by
    the <code class="directive"><a href="../mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
    directive.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="ModuleIdentifier" id="ModuleIdentifier">Module Identifier</a> <a title="Permanent link" href="#ModuleIdentifier" class="permalink">&para;</a></h2>

    <p>This is a string which identifies the module for use in the
    <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive when
    dynamically loading modules. In particular, it is the name of
    the external variable of type module in the source file.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Compatibility" id="Compatibility">Compatibility</a> <a title="Permanent link" href="#Compatibility" class="permalink">&para;</a></h2>

    <p>If the module was not part of the original Apache version 2
    distribution, the version in which it was introduced should be
    listed here.  In addition, if the module is limited to
    particular platforms, the details will be listed here.</p>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/module-dict.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/module-dict.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/module-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/module-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/module-dict.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/module-dict.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else {
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>