Add dependency to FCGI::Client 0.09
[catagits/fcgi2.git] / doc / www5-api-workshop.html
index 13d005f..66945ae 100644 (file)
-<html>
-<head>
-<title>FastCGI: A High-Performance Gateway Interface</title>
-</head>
-
-<body>
-<center>
-<h2>FastCGI: A High-Performance Gateway Interface</h2>
-Position paper for the workshop
-"Programming the Web - a search for APIs",<br>
-Fifth International World Wide Web Conference,
-6 May 1996, Paris, France.<br>
-<p>
-Mark R. Brown<br>
-Open Market, Inc.<br>
-<p>
-
-2 May 1996<br>
-</center>
-<p>
-
-<h5 align=center>
-Copyright &copy; 1996 Open Market, Inc.  245 First Street, Cambridge,
-  MA 02142 U.S.A.<br>
-Tel: 617-621-9500 Fax: 617-621-1703 URL:
-  <a href="http://www.openmarket.com/">http://www.openmarket.com/</a><br>
-</h5>
-<hr>
-
-
-<H3>Abstract</H3>
-
-FastCGI is a fast, open, and secure Web server interface that
-solves the performance problems inherent in CGI without
-introducing any of the new problems associated with writing applications
-to lower-level Web server APIs.  Modules to support FastCGI can
-be plugged into Web server APIs such as Apache API, NSAPI, and ISAPI.
-Key considerations in designing FastCGI included minimizing the cost of
-migrating CGI applications (including applications written in popular
-scripting languages such as Perl), supporting both single-threaded and
-multi-threaded application programming, supporting distributed configurations
-for scaling and high availability, and generalizing the roles that
-gateway applications can play beyond CGI's "responder" role.<p>
-
-For more information on FastCGI, including an interface specification
-and a module for the Apache server, visit the
-<a href = "http://www.fastcgi.com/">www.fastcgi.com Web site</a>.
-
-
-<H3>1. Introduction</H3>
-
-The surge in the use of the Web by business has created great demand
-for applications that create dynamic content.  These applications
-allow businesses to deliver products, services, and messages whose
-shape and content are influenced by interaction with and knowledge
-of users.
-
-<P> This move towards dynamic Web content has highlighted the performance
-limits of CGI (Common Gateway Interface).  In response there has been
-a proliferation of Web server APIs.  These APIs address some (though
-not all) of the performance problems with CGI, but are not designed to
-meet the need of business applications.  When applied to business
-applications, Web server APIs suffer from these problems:
-
-<UL>
-<LI><B>Complexity.</B>
-  Server APIs introduce a steep learning curve, with increased
-  implementation and maintenance costs.
-<LI><B>Language dependence.</B>
-  Applications have to be written in a language supported by the
-  server API (usually C/C++).  Perl, the most popular language for
-  CGI programs, can't be used with any existing server API.
-<LI><B>No process isolation.</B>
-  Since the applications run in the server's address space, buggy
-  applications can corrupt the core server (or each other).  A
-  malicious or buggy application can compromise server security, and
-  bugs in the core server can corrupt applications.
-<LI><B>Proprietary.</B>
-  Coding your application to a particular API locks you into a
-  particular server.
-<LI><B>Tie-in to server architecture.</B>
-  API applications have to share the same architecture as the server:
-  If the Web server is multi-threaded, the application has to be
-  thread-safe.  If the Web server has single-threaded processes,
-  multi-threaded applications don't gain any performance advantage.
-  Also, when the server's architecture changes, the API
-  will usually have to change, and applications will have to be
-  adapted or rewritten.
-</UL>
-
-Web server APIs are suitable for applications that require an intimate
-connection to the core Web server, such as security protocols.  But
-using a Web server API for a Web business application would be much
-like using an old-fashioned TP monitor, which required linking
-applications right into the monitor, for a modern business transaction
-processing application.  The old-fashioned solution suffers a huge
-development and maintenance cost penalty because it ignores 30 years
-of progress in computing technology, and may end up
-providing inferior performance to boot.  Nobody uses the old technology
-unless they are already locked into it.
-
-<p> FastCGI is best viewed as a new implementation of CGI,
-designed to overcome CGI's performance problems.  The major
-implementation differences are:
-
-<UL>
-  <LI>FastCGI processes are persistent: after finishing a request,
-  they wait for a new request instead of exiting.
-
-  <LI>Instead of using operating system environment variables and
-  pipes, the FastCGI protocol multiplexes the environment information,
-  standard input, output, and error over a single full-duplex
-  connection.  This allows FastCGI programs to run on remote machines,
-  using TCP connections between the Web server and the FastCGI
-  application.
-</UL>
-
-<p> FastCGI communicates the exact same information as CGI in a
-different way.  Because FastCGI <i>is</i> CGI, and like CGI runs
-applications in separate processes, it suffers none of the server API
-problems listed above.
-
-
-<H3>2. Migration from CGI</H3>
-
-Open Market has developed a FastCGI application library
-that implements the FastCGI protocol, hiding the protocol details
-from the developer. This library, which is freely available,
-makes writing FastCGI programs
-as easy as writing CGI applications.
-
-<P> The application library provides replacements for the C language
-standard I/O (stdio) routines such as <TT>printf()</TT> and
-<TT>gets()</TT>.  The library converts references to environment
-variables, standard input,
-standard output, and standard error to the FastCGI protocol.
-References to other files &quot;fall through&quot; to the underlying
-operating system standard I/O routines.  This approach has several benefits:
-
-<UL>
-  <LI>Developers don't have to learn a new API to develop FastCGI
-  applications.
-
-  <LI>Existing CGI programs can be migrated with minimal
-  source changes.
-
-  <LI>FastCGI interpreters for Perl, Tcl, and other interpreted
-  languages can be built without modifying the interpreter source
-  code.
-</UL>
-
-<P>
-Here's a simple FastCGI application:<P>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+   <HEAD>
+      <TITLE>
+         FastCGI: A High-Performance Gateway Interface
+      </TITLE>
+<STYLE TYPE="text/css">
+ h5.c2 {text-align: center}
+ div.c1 {text-align: center}
+</STYLE>
+   </HEAD>
+   <BODY>
+      <DIV CLASS="c1">
+         <H2>
+            FastCGI: A High-Performance Gateway Interface
+         </H2>
+         Position paper for the workshop &quot;Programming the Web - a search for APIs&quot;,<BR>
+         Fifth International World Wide Web Conference, 6 May 1996, Paris, France.<BR>
+         <P>
+            Mark R. Brown<BR>
+            Open Market, Inc.<BR>
+         </P>
+         <P>
+            2 May 1996<BR>
+         </P>
+      </DIV>
+      <P>
+      </P>
+      <H5 CLASS="c2">
+         Copyright &copy; 1996 Open Market, Inc. 245 First Street, Cambridge, MA 02142 U.S.A.<BR>
+         Tel: 617-621-9500 Fax: 617-621-1703 URL: <A HREF=
+         "http://www.openmarket.com/">http://www.openmarket.com/</A><BR>
+      </H5>
+      <HR>
+      <H3>
+         Abstract
+      </H3>
+      <P>
+         FastCGI is a fast, open, and secure Web server interface that solves the performance problems inherent in CGI
+         without introducing any of the new problems associated with writing applications to lower-level Web server
+         APIs. Modules to support FastCGI can be plugged into Web server APIs such as Apache API, NSAPI, and ISAPI. Key
+         considerations in designing FastCGI included minimizing the cost of migrating CGI applications (including
+         applications written in popular scripting languages such as Perl), supporting both single-threaded and
+         multi-threaded application programming, supporting distributed configurations for scaling and high
+         availability, and generalizing the roles that gateway applications can play beyond CGI&#39;s
+         &quot;responder&quot; role.
+      </P>
+      <P>
+         For more information on FastCGI, including an interface specification and a module for the Apache server,
+         visit the <A HREF="http://www.fastcgi.com/">www.fastcgi.com Web site</A>.
+      </P>
+      <H3>
+         1. Introduction
+      </H3>
+      <P>
+         The surge in the use of the Web by business has created great demand for applications that create dynamic
+         content. These applications allow businesses to deliver products, services, and messages whose shape and
+         content are influenced by interaction with and knowledge of users.
+      </P>
+      <P>
+         This move towards dynamic Web content has highlighted the performance limits of CGI (Common Gateway
+         Interface). In response there has been a proliferation of Web server APIs. These APIs address some (though not
+         all) of the performance problems with CGI, but are not designed to meet the need of business applications.
+         When applied to business applications, Web server APIs suffer from these problems:
+      </P>
+      <UL>
+         <LI>
+            <B>Complexity.</B> Server APIs introduce a steep learning curve, with increased implementation and
+            maintenance costs.
+         </LI>
+         <LI>
+            <B>Language dependence.</B> Applications have to be written in a language supported by the server API
+            (usually C/C++). Perl, the most popular language for CGI programs, can&#39;t be used with any existing
+            server API.
+         </LI>
+         <LI>
+            <B>No process isolation.</B> Since the applications run in the server&#39;s address space, buggy
+            applications can corrupt the core server (or each other). A malicious or buggy application can compromise
+            server security, and bugs in the core server can corrupt applications.
+         </LI>
+         <LI>
+            <B>Proprietary.</B> Coding your application to a particular API locks you into a particular server.
+         </LI>
+         <LI>
+            <B>Tie-in to server architecture.</B> API applications have to share the same architecture as the server:
+            If the Web server is multi-threaded, the application has to be thread-safe. If the Web server has
+            single-threaded processes, multi-threaded applications don&#39;t gain any performance advantage. Also, when
+            the server&#39;s architecture changes, the API will usually have to change, and applications will have to
+            be adapted or rewritten.
+         </LI>
+      </UL>
+      <P>
+         Web server APIs are suitable for applications that require an intimate connection to the core Web server, such
+         as security protocols. But using a Web server API for a Web business application would be much like using an
+         old-fashioned TP monitor, which required linking applications right into the monitor, for a modern business
+         transaction processing application. The old-fashioned solution suffers a huge development and maintenance cost
+         penalty because it ignores 30 years of progress in computing technology, and may end up providing inferior
+         performance to boot. Nobody uses the old technology unless they are already locked into it.
+      </P>
+      <P>
+         FastCGI is best viewed as a new implementation of CGI, designed to overcome CGI&#39;s performance problems.
+         The major implementation differences are:
+      </P>
+      <UL>
+         <LI>
+            FastCGI processes are persistent: after finishing a request, they wait for a new request instead of
+            exiting.
+         </LI>
+         <LI>
+            Instead of using operating system environment variables and pipes, the FastCGI protocol multiplexes the
+            environment information, standard input, output, and error over a single full-duplex connection. This
+            allows FastCGI programs to run on remote machines, using TCP connections between the Web server and the
+            FastCGI application.
+         </LI>
+      </UL>
+      <P>
+         FastCGI communicates the exact same information as CGI in a different way. Because FastCGI <I>is</I> CGI, and
+         like CGI runs applications in separate processes, it suffers none of the server API problems listed above.
+      </P>
+      <H3>
+         2. Migration from CGI
+      </H3>
+      <P>
+         Open Market has developed a FastCGI application library that implements the FastCGI protocol, hiding the
+         protocol details from the developer. This library, which is freely available, makes writing FastCGI programs
+         as easy as writing CGI applications.
+      </P>
+      <P>
+         The application library provides replacements for the C language standard I/O (stdio) routines such as
+         <TT>printf()</TT> and <TT>gets()</TT>. The library converts references to environment variables, standard
+         input, standard output, and standard error to the FastCGI protocol. References to other files &quot;fall
+         through&quot; to the underlying operating system standard I/O routines. This approach has several benefits:
+      </P>
+      <UL>
+         <LI>
+            Developers don&#39;t have to learn a new API to develop FastCGI applications.
+         </LI>
+         <LI>
+            Existing CGI programs can be migrated with minimal source changes.
+         </LI>
+         <LI>
+            FastCGI interpreters for Perl, Tcl, and other interpreted languages can be built without modifying the
+            interpreter source code.
+         </LI>
+      </UL>
+      <P>
+         Here&#39;s a simple FastCGI application:
+      </P>
+      <BR>
+      <BR>
 <PRE>
     #include &lt;fcgi_stdio.h&gt;
 
@@ -158,129 +155,115 @@ Here's a simple FastCGI application:<P>
     {
         int count = 0;
         while(FCGI_Accept() &gt;= 0) {
-            printf("Content-type: text/html\r\n");
-            printf("\r\n");
-            printf("Hello world!&lt;br&gt;\r\n");
-            printf("Request number %d.", count++);
+            printf(&quot;Content-type: text/html\r\n&quot;);
+            printf(&quot;\r\n&quot;);
+            printf(&quot;Hello world!&lt;br&gt;\r\n&quot;);
+            printf(&quot;Request number %d.&quot;, count++);
         }
         exit(0);
     }
 </PRE>
-This application returns a &quot;Hello world&quot;
-HTML response to the client.  It also keeps a counter of the number
-of times it has been accessed, displaying the value of the counter
-at each request.  The <TT>fcgi_stdio.h</TT>
-header file provides the FastCGI replacement routines for the
-C standard I/O library.  The <TT>FCGI_Accept()</TT>
-routine accepts a new request from the Web server.</FONT>
-
-<p> The application library was designed to make migration
-of existing CGI programs as simple as possible.  Many applications
-can be converted by adding a loop around the main request processing
-code and recompiling with the FastCGI application library.
-To ease migration to FastCGI, executables built with
-the application library can run as either CGI or FastCGI programs,
-depending on how they are invoked.  The library detects the execution
-environment and automatically selects FastCGI or regular I/O routines,
-as appropriate.
-
-<P> Applications written in Perl, Tcl, and other scripting
-languages can be migrated by using a language interpreter built
-with the application library.  FastCGI-integrated Tcl and Perl
-interpreters for popular Unix platforms are available from
-the <i>www.fastcgi.com</i> Web site.  The interpreters are
-backward-compatible:  They can run standard Tcl and Perl applications.
-
-
-<H3>3. Single-threaded and multi-threaded applications</H3>
-
-FastCGI gives developers a free choice of whether to develop
-applications in a single-threaded or multi-threaded style.
-The FastCGI interface supports multi-threading in two ways:
-
-<ul>
-  <li> Applications can accept concurrent Web server connections
-  to provide concurrent requests to multiple application threads.
-
-  <li> Applications can accept multiplexed Web server connections,
-  in which concurrent requests are communicated over a single
-  connection to multiple application threads.
-</ul>
-
-<p> Multi-threaded programming is complex -- concurrency makes
-programs difficult to test and debug -- so many developers will prefer
-to program in the familiar single-threaded style.  By having several
-concurrent processes running the same application it is often possible
-to achieve high performance with single-threaded programming.
-
-<p> The FastCGI interface allows Web servers to implement <i>session
-affinity</i>, a feature that allows applications to maintain
-caches of user-related data.  With session affinity, when several
-concurrent processes are running the same application, the Web
-server routes all requests from a particular user to the same
-application process.  Web server APIs don't provide this functionality
-to single-threaded applications, so the performance of an API-based
-application is often inferior to the performance of the
-corresponding FastCGI application.
-
-
-<H3>4. Distributed FastCGI</H3>
-
-Because FastCGI can communicate over TCP/IP connections, it supports
-configurations in which applications run remotely from
-the Web server.  This can provide scaling, load balancing,
-high availability, and connections to systems that don't have
-Web servers.
-
-<p> Distributed FastCGI can also provide security advantages.
-A Web server outside a corporate firewall can communicate
-through the firewall to internal databases.  For instance,
-an application might need to authenticate incoming users
-as customers in order to give access to certain documents
-on the external Web site.  With FastCGI this authentication
-can be done without replicating data and without compromising
-security.
-
-
-<H3>5. Roles</H3>
-
-A problem with CGI is its limited functionality:
-CGI programs can only provide responses to requests. 
-FastCGI provides expanded functionality with support for three
-different application &quot;roles&quot;:
-<UL>
-
-  <LI><B>Responder.</B> This is the basic FastCGI role, and
-  corresponds to the simple functionality offered by CGI today.
-
-  <LI><B>Filter.</B> The FastCGI application filters the requested Web
-  server file before sending it to the client.
-
-  <LI><B>Authorizer.</B> The FastCGI program performs an access
-  control decision for the request (such as performing a
-  username/password database lookup).
-
-</UL>
-
-<P>
-Other roles will be defined in the future.  For instance,
-a &quot;logger&quot; role would be useful, where the FastCGI program
-would receive the server's log entries for real-time processing
-and analysis.
-
-
-<H3>6. Conclusions</H3>
-
-<P>Today's Web business applications need a platform that's fast,
-open, maintainable, straightforward, stable, and secure.  FastCGI's
-design meets these requirements, and provides a logical migration
-path from the proven and widely deployed CGI technology.  This allows
-developers to take advantage of FastCGI's benefits without losing
-their existing investment in CGI applications.
-
-<P>For more information about FastCGI, visit the
-<a href = "http://www.fastcgi.com/">www.fastcgi.com Web site</a>.
-
-
-</BODY>
+      <P>
+         This application returns a &quot;Hello world&quot; HTML response to the client. It also keeps a counter of the
+         number of times it has been accessed, displaying the value of the counter at each request. The
+         <TT>fcgi_stdio.h</TT> header file provides the FastCGI replacement routines for the C standard I/O library.
+         The <TT>FCGI_Accept()</TT> routine accepts a new request from the Web server.
+      </P>
+      <P>
+         The application library was designed to make migration of existing CGI programs as simple as possible. Many
+         applications can be converted by adding a loop around the main request processing code and recompiling with
+         the FastCGI application library. To ease migration to FastCGI, executables built with the application library
+         can run as either CGI or FastCGI programs, depending on how they are invoked. The library detects the
+         execution environment and automatically selects FastCGI or regular I/O routines, as appropriate.
+      </P>
+      <P>
+         Applications written in Perl, Tcl, and other scripting languages can be migrated by using a language
+         interpreter built with the application library. FastCGI-integrated Tcl and Perl interpreters for popular Unix
+         platforms are available from the <I>www.fastcgi.com</I> Web site. The interpreters are backward-compatible:
+         They can run standard Tcl and Perl applications.
+      </P>
+      <H3>
+         3. Single-threaded and multi-threaded applications
+      </H3>
+      <P>
+         FastCGI gives developers a free choice of whether to develop applications in a single-threaded or
+         multi-threaded style. The FastCGI interface supports multi-threading in two ways:
+      </P>
+      <UL>
+         <LI>
+            Applications can accept concurrent Web server connections to provide concurrent requests to multiple
+            application threads.
+         </LI>
+         <LI>
+            Applications can accept multiplexed Web server connections, in which concurrent requests are communicated
+            over a single connection to multiple application threads.
+         </LI>
+      </UL>
+      <P>
+         Multi-threaded programming is complex -- concurrency makes programs difficult to test and debug -- so many
+         developers will prefer to program in the familiar single-threaded style. By having several concurrent
+         processes running the same application it is often possible to achieve high performance with single-threaded
+         programming.
+      </P>
+      <P>
+         The FastCGI interface allows Web servers to implement <I>session affinity</I>, a feature that allows
+         applications to maintain caches of user-related data. With session affinity, when several concurrent processes
+         are running the same application, the Web server routes all requests from a particular user to the same
+         application process. Web server APIs don&#39;t provide this functionality to single-threaded applications, so
+         the performance of an API-based application is often inferior to the performance of the corresponding FastCGI
+         application.
+      </P>
+      <H3>
+         4. Distributed FastCGI
+      </H3>
+      <P>
+         Because FastCGI can communicate over TCP/IP connections, it supports configurations in which applications run
+         remotely from the Web server. This can provide scaling, load balancing, high availability, and connections to
+         systems that don&#39;t have Web servers.
+      </P>
+      <P>
+         Distributed FastCGI can also provide security advantages. A Web server outside a corporate firewall can
+         communicate through the firewall to internal databases. For instance, an application might need to
+         authenticate incoming users as customers in order to give access to certain documents on the external Web
+         site. With FastCGI this authentication can be done without replicating data and without compromising security.
+      </P>
+      <H3>
+         5. Roles
+      </H3>
+      <P>
+         A problem with CGI is its limited functionality: CGI programs can only provide responses to requests. FastCGI
+         provides expanded functionality with support for three different application &quot;roles&quot;:
+      </P>
+      <UL>
+         <LI>
+            <B>Responder.</B> This is the basic FastCGI role, and corresponds to the simple functionality offered by
+            CGI today.
+         </LI>
+         <LI>
+            <B>Filter.</B> The FastCGI application filters the requested Web server file before sending it to the
+            client.
+         </LI>
+         <LI>
+            <B>Authorizer.</B> The FastCGI program performs an access control decision for the request (such as
+            performing a username/password database lookup).
+         </LI>
+      </UL>
+      <P>
+         Other roles will be defined in the future. For instance, a &quot;logger&quot; role would be useful, where the
+         FastCGI program would receive the server&#39;s log entries for real-time processing and analysis.
+      </P>
+      <H3>
+         6. Conclusions
+      </H3>
+      <P>
+         Today&#39;s Web business applications need a platform that&#39;s fast, open, maintainable, straightforward,
+         stable, and secure. FastCGI&#39;s design meets these requirements, and provides a logical migration path from
+         the proven and widely deployed CGI technology. This allows developers to take advantage of FastCGI&#39;s
+         benefits without losing their existing investment in CGI applications.
+      </P>
+      <P>
+         For more information about FastCGI, visit the <A HREF="http://www.fastcgi.com/">www.fastcgi.com Web site</A>.
+      </P>
+   </BODY>
 </HTML>
+