### Apache HTTP Server

# Overview of new features

## New Features with Apache 1.0

New features with this release, as extensions of the Apache functionality (see also more detailed `CHANGES` file) in the source directory. Because the core code has changed so significantly, there are certain liberties that earlier versions of Apache (and the NCSA daemon) took that Apache 1.0 is pickier about - please check the compatibility notes if you have any problems.

- API for server extensions --- see below for a brief sermon on philosophy, or see src/API.html for an actual overview. Most server functionality (including includes, CGI, and most forms of access control) are actually implemented as API-conformant modules; you can also do other neat stuff (we've included a sample module, for instance, which one of us is using to track click-trails using the Netscape cookie mechanism, for visitors who come in through Netscape clients). Modules can also be loaded dynamically using GNU DLD.

  The API is not yet quite stable (see src/TODO for some possible changes), but anything done now will be easily adapted for future versions --- after all, we have more modules to adapt than you do.

- New Process Model - much less forking, no fixed number of children. We found that many people were using values for "MaxServers" either too high or too low, and were hanging themselves on it. The model we adopted is still based on long-lived minimal-forking processes, but instead of specifying one number of persistent processes, the web-master specifies a maximum and minimum number of processes to be "spare" - every couple of seconds the parent checks the actual number of spare servers and adjusts accordingly. This should keep the number of servers concurrently running relatively low while still ensuring minimal forking.
- <VirtualHost> (the configuration directive for multiple-homed servers) is more general now. Just about any srm.conf or httpd.conf command can go in a <Virtualhost> section, with the following specific exceptions: ServerType, UserId, GroupId, StartServers, MaxRequestsPerChild, BindAddress, PidFile, TypesConfig, ServerRoot.
- Support for content negotiation of languages through MultiViews (*.fr, *.de, *.en suffixes), via the new AddLanguage and LanguagePriority commands (code written by Florent Guillaume, guillaum@clipper.ens.fr).
- Significant internal cleanups and rearrangements. The two externally visible consequences of this are that just about all of the unchecked fixed limits are gone, and that the server is somewhat pickier about config file syntax (noting and complaining about extraneous command arguments or other stuff at the end of command lines).
- XBITHACK is a run-time option, and can be selectively enabled per directory --- the -DXBITHACK compile-time option just changes the default. The command which configures it is "XBitHack", which is allowed everywhere "Options" is; this takes an argument --- "XBitHack Off" turns it off; "XBitHack On" gets you the NCSA -DXBITHACK behavior; and "XBitHack Full" gets you the Apache GXBIT stuff on top of that. (-DXBITHACK makes "Full" the default; otherwise, it defaults "Off").
- TransferLog can specify a program which gets the log entries piped to it, a la 'TransferLog "| /var/www/my-perl-script -arg valu"' --- this should give the same SIGTERM/pause/SIGKILL treatment to the logging process on server restarts that a CGI script gets on an aborted request. NB the server is counting on the logging process to work, and will probably hang or worse if it dies.
- Configurable logging module --- this is a replacement for the standard plane-jane Common Log Format code, which supports a LogFormat directive which allows you to control the formatting of entries in the TransferLog, and add some new items if you like (in particular, Referer and User-Agent). EXPERIMENTAL.

## Other features of Apache

- Dynamically loading modules using GNU DLD
- Imagemap Module
- Multiple DirectoryIndex filenames
- "Send as is" file types
- XBITHACK last modified

### Apache HTTP Server