Socket HTTP Server, Step 1

Building on the foundation of your Echo Server, you will begin to implement a simple HTTP server.

Tasks

Use your http-server repository in GitHub for this work. Make a branch step1 from master to do your work for this assignment.

  • Implement a function called response_ok that will return a well formed HTTP “200 OK” response. It will need to be a byte string suitable for transmission through a socket. This method should accept no arguments and return a fully-formed proper response.
  • Implement a function called response_error that will return a well formed HTTP “500 Internal Server Error” response.
  • Update the server loop you built for the echo server so that it:
    • accumulates an incoming request into a variable
    • “logs” that request by printing it to stdout
    • returns a well-formed HTTP 200 response to the client.

As usual, write unit tests demonstrating each function you write before you implement the code to achieve it. Think carefully about how you want to test your functions. Are you validating that the result is a valid HTTP response, or merely that it matches a given string? What is the difference?

Your echo server tests WILL break when you alter your server loop. You can always refactor the tests without having to break the tests on your echo branch. Or you could just comment out your old tests. Either one works here.

When you’ve finished the server loop, write a functional test that demonstrates that it works correctly.

Update your README.md file with a description of the server you’re building. Include any sources or collaborations you used.

Submitting Your Work

When you are done and your tests are all passing, push your work to GitHub and submit a pull request from the step1 branch back to master. Submit the URL of the pull request. After you’ve created the pull request you may merge the step1 branch back to master.

Submit the URL of your pull request.

As with every primary submission, use the Comments feature for this submission to add questions, comments and reflections on the work you have done so far.