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_terminate
register_other_child
http_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_log
http_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_error
aplog_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 popendir
psocket
and pclosesocket
functions allow
for race-condition free socket creation with resource tracking.
Similarly popendir
and pclosedir
protect
directory reading.
is_initial_req
kill_only_once
spawn_child
functions which prevents Apache
from aggressively trying to kill off the child.
alloc debugging code
ALLOC_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_cpystrn
strncpy
"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_mergen
pstrdup
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_url
server_rec *
to taking a request_rec *
.
get_server_name
, get_server_port
const 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.