Q1 MultiThreaded Web Proxy In this assignment you will devel
Q1: Multi-Threaded Web Proxy
In this assignment, you will develop a Web proxy. When your proxy receives an
HTTP request for an object from a browser, it generates a new HTTP request for
the same object and sends it to the origin server. When the proxy receives the
corresponding HTTP response with the object from the origin server, it creates a
new HTTP response, including the object, and sends it to the client. This proxy
will be multi-threaded, so that it will be able to handle multiple requests at the
same time.
then test it by having different browsers request Web objects via your proxy.
Solution
Answer:
Assignment overview: In this assignment you are asked to build a multi-threaded Web proxy server that is capable of delivering Web content on behalf of a remote Web server. When a user\'s browser is configured to connect via a proxy server, her browser establishes a connection to the proxy server\'s machine and forwards its complete request to the proxy server rather than the \"real\" Web server. The proxy server accepts user\'s HTTP requests and forwards them to their final destination - essentially it introduces an extra \"hop\" between the user\'s browser (or the client) and the Web server. There are several reasons why people want to use a proxy server instead of connecting to the remote Web server directly:
Multi-threading is not crucial to the functionality of a Web proxy server, but it is important to allow the server to process multiple simultaneous requests in parallel, a must-have feature for a practical server. This is an individual assignment, so each person should turn in his/her own. Most kinds of communication among the students are encouraged except, of course, copying other people\'s code.
Requirements in detail:
The proxy server acts as an HTTP server to client browsers while it acts as an HTTP client to the \"real\" Web server. The protocol specification for version 1.0 of HTTP is defined in RFC 1945. This is not a long document among the protocol specifications, but it may well appear so for you. For your relief, you are asked to implement a very small part of the complete protocol, which will be explained below. We do try to be as specific as possible in this assignment description in order to reduce your need to refer to the lengthy protocol specification. But you should be prepared to do so occasionally.
A full HTTP-1.0 compliant Web server supports HEAD, POST, and GET methods. Your proxy server only needs to support GET method. To serve each request, we first need to parse the request line and headers sent by the client. Since we will only support GET method, we only care about Web page name in request line. The request line for the proxy server typically looks like this:
Implements a multi-threaded Web proxy server:
Testing:
If you develop your program at your home computer, it is imperative to test it in school network before turn-in. Below we provide some information about how to test your program.
For testing, you can configure a Web browser to use your proxy server. Below are instructions for doing so for some old browser versions. Your current browser may require different setup. We trust that you can figure it out. For Internet Explorer 6.0, you can configure it in the following way: 1) Choose \"Tools\" in the Menu; 2) Click \"Internet Options ...\"; 3) Choose \"Connections\" Tab; 4) Click \"LAN Settings ...\"; 5) Choose \"Proxy Server\" and fill the server name as well as its port number. For Firefox 2.0.0.5, you can configure it in the following way: 1) Choose \"Edit\" in the Menu; 2) Click \"Preferences\"\'; 3) Choose \"Advanced\" Tab; 4) Choose \"Network\" Sub-Tab; 5) Click \"Settings\" for Connection; 6) Click \"Manual proxy configuration\" and fill the server name as well as its port number. Make sure your proxy server is running and now all HTTP requests from your browser are served via the proxy server!
You can also test your server using the TCP client program you developed in assignment #0. For this example, I assume the program, called tcpclient, takes console input and sends to a server at a specific port number. It then receives server responses and prints them on the console. If your proxy server runs at port 8080 of cycle1.csug.rochester.edu, you can do
You can also try this with the Web server directly, then you will need to specify the default port number 80. For instance, you can do


