This homework is due at 5 pm on September 21, 2000 (email time stamp). The non-programming part of the homework will follow shortly. A review of sockets may be helpful.
GET http://www.cs.columbia.edu/index.html HTTP/1.1 Proxy-Connection: Keep-Alive User-Agent: Mozilla/4.5 [en] (X11; I; SunOS 5.6 sun4u) Host: www.cs.columbia.edu Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8
The end of the request is indicated by a blank line.
In this example, your proxy would then establish a TCP connection to www.cs.columbia.edu and send the same request, but with the first line as
GET /index.html HTTP/1.1
The server may close the connection when it is done, but you shouldn't rely on that. (Modern servers leave the connection open for efficiency.)
Be sure that the version number of the request (HTTP/1.0 or HTTP/1.1) remains the same when crossing the proxy.
You should configure your web browser to use your proxy server. (In Netscape, use Edit/Preferences/Advanced/Proxies.)
Details of the HTTP protocol can be found in RFC 2616.
You might find the host2ip.c routine handy to translate host names into IP addresses. You may use either C(++) or Java to implement the proxy. Please do not use Perl, Tcl or VisualBasic. Your proxy only has to support the HTTP GET request, not POST or PUT, but it should be able to deal with web servers listening on ports other than the default port of 80 (e.g., http://www.cs.columbia.edu:8123/index.html).
Last updated by Henning Schulzrinne