CERN httpd 3.0pre3 available

Ari Luotonen (
Thu, 5 May 94 00:14:34 +0200

* * * * *

CERN httpd is a generic hypertext server which can be used as a
regular HTTP server running typically on port 80 to serve hypertext
and other documents, and also as a proxy -- a server on a firewall
machine -- that provides access for people inside a firewall to the
outside world. When running as proxy httpd may be configured to
do caching of documents resulting in faster response times.

* * * * *

CERN httpd 3.0pre3 is available, source code from:

This package includes EVERYTHING, so don't ftp the libwww.
Precompiled binaries are supplied for Sun4, Solaris, HP, NeXT,
NeXT-386, Decstation Ultrix and DEC OSF/1 under:

Precompiled binaries are in cern_httpd_3.0pre3.tar.Z, which also
includes a default set of icons (three new ones by Rainer Klute:
unknown has a ? in it, gzip is slimmer than compress, and doc looks
better now; thanks, Rainer!), and sample configuration files for
normal and proxy use, plus a template file containing all the
configuration directives understood by httpd (thanks to Sean Gonzalez
for it!).

For Sun4 there is also a cern_httpd_3.0pre3-lresolv.tar.Z which
contains an httpd linked with the -lresolv option.

Binaries for utility programs (htadm, htimage, cgiparse and cgiutils)
are in a separate tar packet: cern_httpd_utils_3.0pre3.tar.Z.

Compilation for other Unix platforms should not be very complicated.
I would be happy to receive diffs, if any, to make it compile for
other platforms. Also binaries other than those already on are welcome.

VMS port is on its way!

Online docs:
PostScript [75 pages]:
FTP all HTML files:
FTP compressed PS file:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


3.0 Prerelease 1

* If-Modified-Since GET request now works correctly with proxy
(client can do conditional GET/proxy can do conditional GET plus
all the combinations of these).
* Pragma: no-cache supported; by sending this header to the proxy
the client will force it to refresh its cache from remote server.
Pragma headers are also forwarded to the remote server.
* Server now resets its state correctly when it receives the HUP
signal (directory listing icons used to stop working).
* -restart option - httpd will find out the actual server process
number and send s HUP signal to it to make it reload its
configuration files; note that httpd must still have the same
configuration file command line parameters (-r options) as the
actual server (so it finds out the ServerRoot and PidFile).
* Now makes appropriate entry to error log when restarting.
* Made common logfile format default, the old format can still be
used with the LogFormat directive:

LogFormat old

* Multiple wild-card (asterisk) matching in configuration file
works; it is a bit different from typical regular expression
matching in that the wildcard matches the shortest possible
amount of characters instead of the longest matching string; this
is the best choise in most of the cases. Consider:

Pass http://*/* /mirror/*/http/*

Clearly the first asterisk should rather match only the hostname, and
not the entire path except the filename.
* Rules can now have asterisks and whitespace in them: precede them
with a backslah; as a result also the backslash itself has to be
escaped with another backslash.
* The tilde character after a slash has to be explicitly matched:

Map /* /foo/bar/*

does not match user-supported directories, but:

Map /~* /Webs/users/*

does match them.
* Fixed the problem that user-supported directories could not be
mapped or Protect'ed.
* Hostname matching made case-insensitive in access control/caching
* Added suffixes .htm and .htmls to the default set of known
* Fixed some of the mysterious caching problems (all that were
reported to me and that I could reproduce).
* Made it possible to specify the various byte/kilo/mega sizes in
cache configuration with letters after the number (so it's no
longer necessary to remember if the default is kilobytes or

CacheSize 150 M
CacheLimit_1 100 K
CacheLimit_2 2 M

The numbers still have to be cardinals.
* Content-Length given for all documents, including
(non-nph-)script responses, generated directory listings, error
responses, all the documents retrieved over another protocol by
the proxy (FTP, Gopher, ...), including HTTP responses from
servers that didn't give it originally.
* MaxContentLengthBuffer directive to specify the maximum bytecount
for the proxy to buffer in order to find out the content-length
for the client - content-length is always calculated for the
logs, but the user migth interrupt the connection if nothing seems
to be happening, even though it is the proxy that is just
buffering the entire file in order to find out the content-length
before actually sending it to the client.
* Caching module now checks that it receives the correct
content-length; if not it discards the cached document. This rules
out the possibility to cache a truncated document from a timed out
connection in 99.99% of the cases (0.01% comes from the fact that
Plexus sends a timeout error message concatenated to the document
and if so should happen that this produces exactly the correct
content-length then there is nothing that can be done about it; in
practice this never happens).
* Made HEAD work always, even on proxy with other protocols (FTP,
* PASV (Passive mode) in FTP now supported. It is no longer
necessary to allow incoming connections above 1024 on the firewall
host just to make FTP work. If PASV fails httpd will retry PORT.
* Welcome messages from FTP servers get shown on top of the
directory listings.
* Fixed bug with old FTP files getting wrong date in the listing.
* Gopher listings now have icons.
* Proxy now reports unknown host errors appropriately.
* Fixed encoding-decoding problems with directory listings.
* Added ScriptTimeOut - scripts that do not finish in this amount of
time will be killed by httpd. Default value is 5 minutes.
* A /~username URL with an invalid username no longer causes an
infinite redirection loop.
* The two files missing in FTP listings are no longer missing (they
weren't in 2.18beta, either).
* Fixed a possible error condition that might cause the server to
stop responding, or even die.
* Server now resets its UserId and GroupId even when in gc-only mode
(this solves problems with .cache_info files sometimes being
unwritable to actual caching processes).
* CacheAccessLog is now opened during startup while running as root
to avoid opening problems. There is no longer logging to
individual files according to remote hosts - all cache accesses
are logged to this single file.
* CacheOnly directive for specifying a set of URLs that should be
cached (for cases when there are only a few sites that should be
* Added DELETE-Script directive for specifying the CGI script to
handle DELETE method.
* NoProxy directive to allow the proxy to do direct access to some
servers instead of connecting to another proxy server (contains a
list of domain names). This works exactly like the no_proxy
environment variable on clients. (Thanks to Rainer Klute for the
patch!) This is only necessary when running multiple proxy servers
that connect to each other.
* Fixed a bug that sometimes caused time directives to be parsed
incorrectly (e.g. CacheDefaultExpiry).
* Multilanguage addition to allow server to understand e.g. that
British English is also English, and that the US citizens do
understand it (thanks to Toshihiro Takada for the patch!).
* Removed:
+ GcReqInterval and GcTimeInterval - not very good criteria to
start doing garbage collection (GcDailyGc is better, giving
the actual time to lauch gc)
+ cache access logging to individual logfiles according to
remote host (wasted resources - a separate program is better
for collecting this information from a single log file).
+ -a and -R options (never used).
+ BodyTimeOut replaced by ScriptTimeOut
+ includes from Makefiles (not supported by all the makes).
+ #elif preprocessor directive removed (wasn't supported by all
the HP preprocessors)

3.0 Prerelease 2

* ~username form understood with ServerRoot, Search, PutScript,
PostScript, DeleteScript, AccessLog, ErrorLog, CacheAccessLog
* Opens cache access log only if caching is turned on.
* Binary distribution now contains a template configuration file
that has all the configuration directives understood by httpd
(thanks to Sean Gonzalez for it!).

3.0 Prerelease 3

* Unescaping bug fixed in news module (caused many articles to fail
to be retrieved).
* News module now gives appropriate error reponses for unavailable
articles and non-existent news groups.
* FTP and HTTP modules now give better error responses.
* Fixed the cache access log to show the correct content-lengths.
* GMT-to-localtime transformation works now on all platforms in
caching (was broken on others than Sun).

 Ari Luotonen		  | Henrik Frystyk		| Mark Donszelmann  |	|
 + 41 22 767 8583	  | + 41 22 767 8265		| + 41 22 767 3555

-------- World-Wide Web Project, CERN, CH-1211 Geneve 23, Switzerland --------