A Web Proxy Server
The objective of the exercise is to implement a Web Proxy Server. A Web proxy is a local server, which fetches items from the Web on behalf of a Web client instead of the client fetching them directly. This allows for caching of pages and access control.
The program should be able to:
- Respond to HTTP & HTTPS requests, and should display each request on a management
console. It should forward the request to the Web server and relay the response to the
browser.
- Handle websocket connections.
- Dynamically block selected URLs via the management console.
- Efficiently cache requests locally and thus save bandwidth. You must gather timing and
bandwidth data to prove the efficiency of your proxy.
- Handle multiple requests simultaneously by implementing a threaded server.
The program can be written in a programming language of your choice. However, you must ensure that you do not overuse any API or Library functionality that implements the majority of the work for you.
Note
- You should provide a high-level description of the protocol design and implementation. A listing of the code should also be provided along with meaningful comments. You are required to submit a single PDF file containing the documentation and code using the Turnitin system.
- All submitted work must be original and your own. Please familiarize yourself with the College Plagiarism guidelines – https://www.tcd.ie/undergraduate-studies/general- regulations/plagiarism.php. Submissions that are similar to each other will result in zero marks being awarded to all parties that are identified.
- Late submissions will not be accepted unless accompanied by a medical certificate or an email from your Tutor outlining the reasons for the lateness.
- This project is worth 10% of the marks and will be graded out of 100 marks
Demonstrations will take place during week six of the semester on Tuesday the 26th of February 2019 between 10-12pm in LG.12 in the O’Reilly Institute. You will be required to demonstrate a working prototype of your work, explain your design choices, talk through parts of your code which implement important aspects of your work, and answer any queries from the teaching assistants.




