<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="new_features_2_0.xml.meta">

<title>Overview of new features in Apache HTTP Server 2.0</title>

<summary>
  <p>This document describes some of the major changes between the
     1.3 and 2.0 versions of the Apache HTTP Server.</p>
</summary>

<seealso><a href="upgrading.html">Upgrading to 2.0 from 1.3</a></seealso>

  <section id="core">
    <title>Core Enhancements</title>

    <dl>
      <dt>Unix Threading</dt>

      <dd>On Unix systems with POSIX threads support, Apache httpd can
      now run in a hybrid multiprocess, multithreaded mode. This
      improves scalability for many, but not all configurations.</dd>

      <dt>New Build System</dt>

      <dd>The build system has been rewritten from scratch to be
      based on <code>autoconf</code> and <code>libtool</code>.
      This makes Apache httpd's configuration system more similar to
      that of other packages.</dd>

      <dt>Multiprotocol Support</dt>

      <dd>Apache HTTP Server now has some of the infrastructure in place to
      support serving multiple protocols. <module>mod_echo</module> has
      been written as an example.</dd>

      <dt>Better support for non-Unix
      platforms</dt>

      <dd>Apache HTTP Server 2.0 is faster and more stable on non-Unix
      platforms such as BeOS, OS/2, and Windows. With the
      introduction of platform-specific <a
      href="mpm.html">multi-processing modules</a> (MPMs) and the
      Apache Portable Runtime (APR), these platforms are now
      implemented in their native API, avoiding the often buggy and
      poorly performing POSIX-emulation layers.</dd>

      <dt>New Apache httpd API</dt>

      <dd>The API for modules has changed significantly for 2.0.
      Many of the module-ordering/-priority problems from 1.3 should
      be gone. 2.0 does much of this automatically, and module ordering
      is now done per-hook to allow more flexibility. Also, new calls
      have been added that provide additional module capabilities
      without patching the core Apache HTTP Server.</dd>

      <dt>IPv6 Support</dt>

      <dd>On systems where IPv6 is supported by the underlying
      Apache Portable Runtime library, Apache httpd gets IPv6 listening
      sockets by default. Additionally, the <directive
      module="mpm_common">Listen</directive>, <directive module="core"
      >NameVirtualHost</directive>, and <directive module="core"
      >VirtualHost</directive> directives support
      IPv6 numeric address strings (e.g., "<code>Listen
      [2001:db8::1]:8080</code>").</dd>

      <dt>Filtering</dt>

      <dd>Apache httpd modules may now be written as filters which act on
      the stream of content as it is delivered to or from the
      server. This allows, for example, the output of CGI scripts to
      be parsed for Server Side Include directives using the
      <code>INCLUDES</code> filter in <module>mod_include</module>. The
      module <module>mod_ext_filter</module> allows external programs to
      act as filters in much the same way that CGI programs can act as
      handlers.</dd>

      <dt>Multilanguage Error Responses</dt>

      <dd>Error response messages to the browser are now provided in
      several languages, using SSI documents. They may be customized
      by the administrator to achieve a consistent look and feel.</dd>

      <dt>Simplified configuration</dt>

      <dd>Many confusing directives have been simplified. The often
      confusing <code>Port</code> and <code>BindAddress</code> directives
      are gone; only the <directive module="mpm_common">Listen</directive>
      directive is used for IP address binding; the <directive
      module="core">ServerName</directive> directive specifies the
      server name and port number only for redirection and vhost
      recognition.</dd>

      <dt>Native Windows NT Unicode Support</dt>

      <dd>Apache httpd 2.0 on Windows NT now uses utf-8 for all filename
      encodings. These directly translate to the underlying Unicode
      file system, providing multilanguage support for all Windows
      NT-based installations, including Windows 2000 and Windows XP.
      <em>This support does not extend to Windows 95, 98 or ME, which
      continue to use the machine's local codepage for filesystem
      access.</em></dd>

      <dt>Regular Expression Library Updated</dt>

      <dd>Apache httpd 2.0 includes the <a href="http://www.pcre.org/">Perl
      Compatible Regular Expression Library</a> (PCRE).  All regular
      expression evaluation now uses the more powerful Perl 5
      syntax.</dd>

    </dl>
  </section>

  <section id="module">
    <title>Module Enhancements</title>

    <dl>
      <dt><module>mod_ssl</module></dt>

      <dd>New module in Apache httpd 2.0. This module is an interface
      to the SSL/TLS encryption protocols provided by
      OpenSSL.</dd>

      <dt><module>mod_dav</module></dt>

      <dd>New module in Apache httpd 2.0. This module implements the HTTP
      Distributed Authoring and Versioning (DAV) specification for
      posting and maintaining web content.</dd>

      <dt><module>mod_deflate</module></dt>

      <dd>New module in Apache httpd 2.0.  This module allows supporting
      browsers to request that content be compressed before delivery,
      saving network bandwidth.</dd>

      <dt><module outdated="true">mod_auth_ldap</module></dt>

      <dd>New module in Apache httpd 2.0.41.  This module allows an LDAP
      database to be used to store credentials for HTTP Basic
      Authentication.  A companion module, <module>mod_ldap</module>
      provides connection pooling and results caching.</dd>

      <dt><module>mod_auth_digest</module></dt>

      <dd>Includes additional support for session caching across
      processes using shared memory.</dd>

      <dt><module>mod_charset_lite</module></dt>

      <dd>New module in Apache httpd 2.0. This experimental module allows
      for character set translation or recoding.</dd>

      <dt><module>mod_file_cache</module></dt>

      <dd>New module in Apache httpd 2.0. This module includes the
      functionality of <code>mod_mmap_static</code> in Apache HTTP
      Server version 1.3, plus adds further caching abilities.</dd>

      <dt><module>mod_headers</module></dt>

      <dd>This module is much more flexible in Apache httpd 2.0. It can now
      modify request headers used by <module>mod_proxy</module>, and
      it can conditionally set response headers.</dd>

      <dt><module>mod_proxy</module></dt>

      <dd>The proxy module has been completely rewritten to take
      advantage of the new filter infrastructure and to implement a
      more reliable, HTTP/1.1 compliant proxy. In addition, new
      <directive module="mod_proxy" type="section">Proxy</directive>
      configuration sections provide more readable (and internally
      faster) control of proxied sites; overloaded <code>&lt;Directory
      "proxy:..."&gt;</code> configuration are not supported. The module
      is now divided into specific protocol support modules including
      <code>proxy_connect</code>, <code>proxy_ftp</code> and
      <code>proxy_http</code>.</dd>

      <dt><module>mod_negotiation</module></dt>

      <dd>A new <directive module="mod_negotiation"
      >ForceLanguagePriority</directive> directive can be used to assure that
      the client receives a single document in all cases, rather than
      NOT ACCEPTABLE or MULTIPLE CHOICES responses. In addition, the
      negotiation and MultiViews algorithms have been cleaned up to
      provide more consistent results and a new form of type map that
      can include document content is provided.</dd>

      <dt><module>mod_autoindex</module></dt>

      <dd>Autoindex'ed directory listings can now be configured to
      use HTML tables for cleaner formatting, and allow finer-grained
      control of sorting, including version-sorting, and wildcard
      filtering of the directory listing.</dd>

      <dt><module>mod_include</module></dt>

      <dd>New directives allow the default start and end tags for SSI elements
      to be changed and allow for error and time format configuration
      to take place in the main configuration file rather than in the
      SSI document. Results from regular expression parsing and grouping
      (now based on Perl's regular expression syntax) can be retrieved
      using <module>mod_include</module>'s variables <code>$0</code>
      .. <code>$9</code>.</dd>

      <dt><module outdated="true">mod_auth_dbm</module></dt>

      <dd>Now supports multiple types of DBM-like databases using the
      <directive>AuthDBMType</directive> directive.</dd>

    </dl>
  </section>
</manualpage>
