Pi3Web is a multithreaded, highly configurable multiple platform HTTP 1.0/1.1 web server written in C . Pi3Web 2.0 supports among other things CGI, FCGI, Win-CGI, SSI, directory indexing, SSL, embedded perl, PHP4, Servlets, JSP and XSLT.
Here are some key features of "Pi3Web":
· Cross Platform Design
· Pi3Web is to be easily portable to multiple platforms and processor architectures. It is built using the PiAPI platform abstraction library. This library provides a standard interface to files, shared libraries, threads and synchronization objects.
· Multithreaded On All Platforms
· The Pi3Web is based on a thread execution model for higher concurrency with less system resource utilization. As not all platforms support native multithreading functionality the PiAPI library implements User Context threads by adding additional program stacks and thread scheduling to processes.
· Pi3Web uses a configurable number of processes and threads (thread pooling).
· Pi3Web can reuse threads, i.e. a thread is not destroyed after serving a request.
· Programmable Request Handling
· Pi3Web configuration files outline a schema which dictates how loadable classes and objects are linked and nested together. The configuration files not only specify which loadable classes (CGI, FastCGI, SSI etc.) are executed to handle a request allow individual handlers or groups of handlers to be conditional on various aspects of the request, network connection or resource requested.
· By this mechanism Pi3Web configuration files give some of the flexibility of a simple programming language.
· Server Loadable Plugins
· The Pi2API library provides dynamic loading functionality so server components can be loaded on demand and the server extended without compilation or linking. All severe functionality is provided by loadable classes included in the distribution.
· Protocol API (IO Extensions or Filters)
· Pi3Web uses server loadable classes for IO communication to browsers, CGI programs and fast CGI programs. This allows these mechanisms to be extented to use different transport mechanisms or for IO to be process by filters (such as encryption algorithms).
· Comprehensive Server Programming API
· Pi3Web uses three API programming libraries, PiAPI, Pi2API and Pi3API. These libraries provide 189 functions for threads, files, processes, utilities, shared libraries and HTTP fuctionality.
· CGI and Windows CGI
· Pi3Web is bundled with a CGI (Common Gateway Interface) loadable handler for dispatching browser requests to CGI or windows CGI programs.
· Fast CGI
· The Fast CGI loadable handler can be used to dispatch fast CGI RESPONDER requests to CGI or windows CGI programs to an existing fast CGI application server.
· ISAPI 2.0 Extensions
· Pi3Web provides an ISAPI Extension 2.0 (MS IIS) compliant handler.
· Server-Side Includes
· Server-Side Includes (SSI) are supported via the SendSSI server loadable class.
· PHP4 Support
· There's an embedded PHP4 module in Pi3Web 2.0 for fast PHP4 server side scripting support. PHP can be used as CGI nevertheless. The embedded PHP4 interpreter can be upgraded with the binary packages provided by the php developers.
· Strong SSL Encryption
· Pi3Web 2.0 supports strong SSLv2, SSLv3 or TLSv1 channel encryption based on openssl.
· SSL key and certificate generation
· For quick start with SSL the Administration client provides the generation of SSL keys and self signed certificates. Note, that this feature is not for a production SSL server.
· Basic Realms and Authentication
· Pi3Web supports administration realms, in order to control access rights for groups of users. Users can be authenticated by HTTP Basic authentication, NTLM Authentication or Digest Access Authentication.
· Digest Access Authentication
· On all platforms you can use this strong, MD5 based challenge response method accordingly to RFC 2069 to authenticate without sending passwords through the network and without storing them at the server, if this feature is also supported by the browser (e.g. Opera).
· Complies with HTTP/1.0 and 1.1 Specification
· Pi3Web complies with the HTTP/1.0 specification and adds most features of the HTTP/1.1 specification.
· HTTP Proxying
· The BasicProxy loadable server class provides HTTP caching proxy capabilities.
· Connection Reuse via KeepAlive Option
· Pi3Web has the configuration option to allow browser-server connection to be reused across multiple request to avoid the overhead of TCP/IP connection establishment and tear-down.
· HTTP/1.1 Request Methods
· There's built in support for the HTTP/1.1 request methods PUT, DELETE, OPTIONS and TRACE.
· Other HTTP/1.1 Features
· The server supports simple HTTP/1.1 ranges and chunked encoding.
· Virtual Hosting
· The VirtualHostByAddress, VirtualHostByName and VirtualHostByURL loadable server classes allow the Pi3Web server to change virtual hosts based on a number of criteria.
· Customizable Logging
· The ExpressionLogger loadable server class allows customizable logfile to be written. Any number of different logfiles can be written within process resource limits.
· Server-Side Image Maps
· There's full support for server side image maps now including polygons and ellipse shapes with Pi3Web 2.0.
· ISAPI Filters
· Pi3Web 2.0 introduces an ISAPI Filter handler to support IIS filters.
· Sortable Directory Indexes
· Besides the comfortable directory indexing of Pi3Web 1.03 there's now a HTML based sort-by-column directory index.
· File upload acc. to RFC 1867
· Pi3Web 2.0 supports the browser based file upload in accordance with Netscape's RFC 1867 in a comfortable way.
· Administration client
· The administration client is available for the Win32 platform. It provides comfortable control of the server status as well as management of general settings, performance, mappings, mime types, users and realms, served interfaces, IP- and non-IP virtual hosts, logging, directory indexing, HTTP and SSL configuration. A remote administration client is under development in order to provide the same functionality for Unix based servers.
· Servlet and JSP Support
· With Pi3Servlets there's a Servlet API 2.1 compliant Servlet engine and a JSP 1.0 compliant JSP engine available.
· Embedded Perl and PSP
· With Pi3Perl there's an embedded perl interpreter and a PSP (Perl Server Pages) scripting engine available. Note, that perl based CGI programs are not meant here.
· Realtime XSLT
· XSLT realtime processing for XML, HTML or docbook sgml files is provided by the Pi3XSLT extension based on libxslt and libxml.