Whats new in TclHttpd

3.0

The 3.0* releases feature the following major structural changes:

Startup configuration.

There are now three files that define your server startup sequence:
In practice you may need to customize each of these.
httpd.tcl - the main startup script.  This processes command line
	arguments, opens the server sockets, does setuid and
	a other process-wide configuration.
httpdthread.tcl - a per-thread script that is also run by each thread.
	This has most of the "package require" calls and the
	various initialization calls that sets up your domian handlers.
	Oddly, this typically has Url_PrefixInstall commands, although
	these could also be in the httpd.tcl file.
tclhttpd.rc - a configuration file that sets various parameters.
	These include the port numbers, hostname, webmaster email, etc.

Standard Tcl Library dependency.

The server now depends on the ncgi, base64, and html packages
from the Standard Tcl Library.  See the TCLLIB file for
details about setting up the Standard Tcl Library.

Generalized Access Control.

The Url module now supports a more general access control
filter that is called before the Url is dispatched to
the domain handler.  This means, for example, you can use
.htaccess or .tclaccess file-based control for non-file
URLS like application-direct URLs.

Thread support.

You can now have your domain handler run in a worker thread.
The Url_PrefixInstall call takes an extra flag to specify this.
This requires that you have a Tclsh compiled with threads
enabled, plus you have the Thread extension.  Tcl 8.3.1
does not have all the right features to support passing sockets
between threads, so data is copied an extra time.  Tcl 8.4 will
have the right hooks (these are already in the CVS source base)
and the Thread extension will be updated to support it
in a future release.  Either way, the use of threads is nicely
hidden behind the Httpd_Return* APIs that you used before,
so you don't have to change your domain handlers to use threads.

SSL support.

This depends on the TLS extension by Matt Newman, as well as either
the OpenSSL or RSAREF crypto libraries.  If the server can
successfully "package require tls" then it will attempt to
start open an HTTPS port.  You must have the appropriate
certificates installed and edit the .rc file to reference
them.  The certs/README.ssl file has more details.

