EECS 122 Project 1 (due 4/15/99 [updated!])
In this assignment, you will build a server
for web clients. The project is intended to expose you to the
socket programming interface, the typical OS manipulations required of
an Internet server, and the HTTP protocol used to provide web content (today, mostly
The project will be evaluated on correct operation, documentation, performance,
and "clean-ness" of the code. This means that not only should the
implementations work properly, but they must be understandable to others
who will read the documentation or source code.
For more details on the evaluation criteria and how to submit the project, click
Base Server Specifications
Your server should be written in C or C++ and
executed in a Unix or Windows NT System [* see footnote at end for NT
accounts]. They must be able to handle
more than one simultaneous client access. They should also be robust
to unusual input introduced by the client program (e.g. very very long
URLs). They must handle HTTP 1.0 clients (for HTML, GIF, and JPEG files, GET and HEAD
methods). They must support logging of connections
using the common logfile format (see below) and the execution of CGI
scripts (at least for GET). Here is a more detailed summary (for HTTP 1.0):
- GET requests:
- need not understand HTTP/0.9 requests (page 13 in RFC1945)
- need only understand JPEG, GIF, and HTML file/content types
- need only understand ISO-8859-1 character sets
- should be rooted in a directory you have acces to that can be
configured when the server starts execution. (hint: Please read RFC1945 carefully).
- need support 'If-Modified-Since' request-header field
- need not log 'From' request-header fields
- need not act in any special way on a 'Referer' request-header
- need include a 'Server' response-header field
- need not implement the 'Additional Features' (Appendix D of RFC 1945)
- HEAD requests:
- CGI 1.1
- for the server only implementing GET and HEAD, need not implement stdin
- for base server, should accept GET and deal with command line arguments
- for base server, should accept GET and deal with extra path information
The project will be implemented in groups of three people. You may
partition the work however you like, but each group member will receive
the same project grade.
Listed below are a number of extensions for the basic web server.
You must choose at least one of these extensions to provide in your
server. Additional extensions will be rewarded with a better grade
on the project.
Once the server is ready to be turned in, it should be left running
on one of the EECS machines on some port number you choose.
You will need to provide the TAs with the name of the computer and
port number on which it is running. The first page displayed
(e.g. index.html or similar) should indicate the members of the
implementation group, SIDs, and e-mail addresses, and special features
the server provides, and any other particular information you would like us
to know about.
The following extensions may be implemented in your server. You
must implement at least one of them. Other extensions (that you choose)
may be implemented [ask for approval] in addition to one or more of these,
provided they are well-described in the documentation.
What to turn in?
- implement POST requests (including appropriate CGI support)
- use HTTP 1.1 if the client supports it; otherwise resort to 1.0
- implement basic authentication (password-protected pages)
- implement Digest Access Authentication (RFC 2069)
- implement SSL 3.0
- throttling (limiting bandwidth of connections on certain pages)
- C/C++ "servlets": provide server extensibility via C/C++ functions
- implement SSI (server-side includes)
Where to get help?
[*] Students wishing to use Windows NT
Please send e-mail to firstname.lastname@example.org if you with to use the facilities
in 111 Cory for Windows NT programming. He will arrange account
creation for you.
Back to EE122 Homepage