CS631 -- Advanced Programming in the UNIX Environment - Final Project

Final Project: Write a simple web server


The objective of this assignment is for you to write a simple web server that speaks a limited version of HTTP/1.0 as defined in RFC1945. This gives you occasion to understand the process of reading an RFC and implementing a well-known protocol.

You will implement the sws(1) command as described in the manual page provided to you here.

As usual, the general homework guidelines apply.

This is a non-trivial programming assignment -- do not postpone starting to work on this! Try to first get the basics right, then add functionality one by one, always ensuring that the added code did not break any previous functionality. If you're stuck, describe your problem on the mailing list.

Team work

This assignment will be completed in groups of 2 or 3 members. Your team will use the git(1) revision control system to track progress and collaborate. Please see this page for details on setting up your shared repository.

Please note that all members of the team are expected to participate and need to contribute in equal parts. Your git commit log will be part of the final submission, and your ability to collaborate with your team mates a factor in your grade. Commit early, commit often, communicate regularly. I expect your final README to include details about the collaboration and division of work.

Additional considerations

Please carefully read RFC1945 to understand version 1.0 of the Hyper Text Transfer Protocol.

Please carefully read RFC3875 to understand the Common Gateway Interface.

Your program should behave as one would expect from a regular system daemon. That is, it should detach from the controlling terminal and run in the background, accept multiple simultaneous connections, not generate any messages on stdout unless in debugging mode etc.

Your program does have to return normal HTTP/1.0 status codes as described in the RFC.

Deliverables and Due Date

You will submit a tar archive of all your files, including a Makefile. The tar archive will be named "user1-user2.tar", and extract into a directory named "user1-user2", where user1 etc. are the usernames of your group's members.

You must submit a snapshot of your work in progress by 2018-11-14 15:59:59. By then, your program must be able to accept network connections, read data from the client and validate the request made. This includes parsing the request method and protocol information as well as identifying supported client headers. Failure to submit the snapshot will result in a 10% deduction from the final grade.

The due date for this assignment is 2018-12-03 15:59:59. Please attach the file to an email sent from your @stevens.edu email address to jschauma@stevens.edu with a subject of "[CS631] final project".

[Course Website]