HTML and the HTTP protocol were originally designed as a way of presenting, and hyperlinking, static documents (resources) on the Internet. A URL (Uniform Resource Location) such as www.example.com/foo/bar.html identifies a resource /foo/bar.html on host www.example.com. When dealing with static content, the resource path almost always corresponds to a relative path on the host's file system.
However, as the Web developed, users clamoured for a more dynamic, interactive experience. Rather than simply serve static documents, Web servers would now be expected to respond to users; serve them pages personalised to their preferences, and respond to information POSTed. To handle this, the original National Centre for Supercomputing Applications httpd server introduced the Common Gateway Interface. A URL such as www.example.com/prog.cgi would point not to a static document, but to an executable program. A standard interface would allow the program to read information about the HTTP request, and provide a response, which would be sent back to the client.
CGI defines, as its name implies, an interface between programs (usually written in Perl or C) and the web server. It does not address the problems which web development presents over traditional desktop development:
A variety of solutions exist to some or all of these problems, spanning the full range from simple CGI libraries to the colossal JEE. These Web Application Frameworks are the subject of this study.