New features with this release, as extensions of the Apache functionality. Because the core code has changed so significantly, there are certain liberties that earlier versions of Apache (and the NCSA daemon) took that recent Apache versions are pickier about - please check the compatibility notes if you have any problems.
If you're upgrading from Apache 1.2, you may wish to read the upgrade notes.
In addition to a number of bug fixes and internal performance enhancements, Apache 1.3 has the following specific new user features:
Configuration file, and the
CheckSpelling
directive must be set to on.
Configuration
have been replaced with "AddModule" with a slightly different syntax.
For module authors there are some changes designed to make it
easier for users to add their module.
mod_mime_magic, has been
added. It uses "magic numbers" and other hints from a file's contents
to figure out what the contents are. It then uses this information to
set the file's media type, if it cannot be determined by the file's
extension.
mod_dir module has been split in two, with
mod_dir handling directory index
files, and mod_autoindex
creating directory listings. Thus allowing folks to remove
the indexing function from critical servers.
mod_proxy's outgoing connections
larger network buffers, for increased throughput.
writev (where available)
to issue multiple writes with a single system call. They also avoid
copying memory into buffers as much as possible. The result is
less CPU time spent on transferring large files.
mmap, which means bytes are only copied from the
disk buffer to the network buffer directly by the kernel. The
program never copies bytes around, which reduces CPU time.
(Only where available/tested.)
mod_log_config
can be compile-time configured to buffer writes.
strncpy() with ap_cpystrn(), a
routine which doesn't have to zero-fill the entire result. This
has dramatic effects on mod_include speed.
See the new performance documentation for more information.
UNIQUE_ID.
Host: header from the client.
Previously this address was implicitly the same as the "main address"
of the machine, and this caused no end of problems for users, and
was not powerful enough.
Please see the Apache Virtual Host
documentation for further details on configuration.
child_init function for module APIchild_exit function for module APIchild_init and
child_exit functions are passed a pool whose lifetime is
the same as the lifetime of the child (modulo completely fatal
events in which apache has no hope of recovering). In contrast,
the module init function is passed a pool whose lifetime
ends when the parent exits or restarts.
child_terminateregister_other_childhttp_main.h. This is used in the parent to register
a child for monitoring. The parent will report status to a supplied
callback function. This allows modules to create their own children
which are monitored along with the httpd children.
piped_loghttp_log.h. This API provides the common code for
implementing piped logs. In particular it implements a reliable piped
log on architectures supporting it (i.e., Unix at the moment).
ap_*set_last_modified split into threeset_last_modified performed multiple
jobs including the setting of the Last-Modified header, the
ETag header, and processing conditional requests (such as
IMS). These functions have been split into three functions:
set_last_modified, set_etag, and
meets_conditions. The field mtime has been
added to request_rec to facilitate
meets_conditions.
aplog_erroraplog_error.
This is still a work in progress.
set_file_slot for config parsingset_file_slot routine provides a standard routine that
prepends ServerRoot to non-absolute paths.
post_read_request module APIpsocket, and popendirpsocket and pclosesocket functions allow
for race-condition free socket creation with resource tracking.
Similarly popendir and pclosedir protect
directory reading.
is_initial_reqkill_only_oncespawn_child functions which prevents Apache
from aggressively trying to kill off the child.
alloc debugging codeALLOC_DEBUG provides a rudimentary memory
debugger which can be used on live servers with low impact --
it sets all allocated and freed memory bytes to 0xa5. Defining
ALLOC_USE_MALLOC will cause the alloc code to use
malloc() and free() for each object. This
is far more expensive and should only be used for testing with tools
such as Electric Fence and Purify. See main/alloc.c
for more details.
ap_cpystrnstrncpy "lookalike", with slightly different
semantics is much faster than strncpy because it
doesn't have to zero-fill the entire buffer.
table_addn, table_setn,
table_mergenpstrdup
on their arguments. This provides for big speedups. There is
also some debugging support to ensure code uses them properly.
See src/CHANGES for more information.
construct_urlserver_rec * to taking a request_rec *.
get_server_name, get_server_portconst char *apapi_get_server_version(). The use of
the SERVER_VERSION symbol is deprecated and anti-recommended.
In addition, a related datum is now available through the use of the
API routine const char *apapi_get_server_built(),
which returns a string representing the time the core server was linked.
configure script and a corresponding top-level
Makefile.tmpl file. The goal is to provide a GNU Autoconf-style
frontend which is capable to both drive the old src/Configure
stuff in batch and additionally installs the package with a GNU-conforming
directory layout. Any options from the old configuration scheme are
available plus a lot of new options for flexibly customizing Apache.
mod_so was cleaned up and the
src/Configure script was extended to setup the totally
platform-dependend commands to build DSO files on all major Unix platforms
which support the pragmatic dlopen() interface (Linux, FreeBSD,
Solaris, SunOS, IRIX, OSF1, UnixWare). The two popular platforms HP/UX and
AIX are not supported because they both use a very special proprietary
interface. Second the modules mod_proxy and
mod_mime were unbundled to be able to use them independend from
each other. Finally the Makefile generation stuff in
src/Configure was overhauled to support building shared objects
as clean as building static objects. Additionally the new APACI (see below)
provides a powerful mechanism for out-of-the-box enabling, building,
installing and activating those DSO-based modules.
apxs was
created which provides off-source building, installing and activating of
those DSO-based modules. It completely hides the platform-dependend
DSO-build commands from the user and provides an easy way to build modules
outside the Apache source tree. To achieve this APACI installs the Apache C
header files together with the apxs tool.