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

Group 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. Some of the invocations / requests your program must be able to handle are shown here; you can create directories to test your server against using this script.

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. 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. Stronger team members have the responsibility to guide and mentor less advanced team members, not to write all the code themselves. I expect your final README to include details about the collaboration and division of work: summarize what parts where completed by whom, how you collaborated, and how each of you contributed.

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.

Note: your web server only needs to accept relative URIs (see RFC1945, Section 3.2.1); does not need to handle RFC1738 percent-encoded URIs; does not need to validate URIs against reserved character user.

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-user3.tar", and extract into a directory named "user1-user2-user3", where user1 etc. are the usernames of your group's members.

You must submit a snapshot of your work in progress by 2022-11-21 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 2022-12-12 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] group project".

[Course Website]