1 / 12

Building a Simple Web Proxy

Building a Simple Web Proxy. COS 461 Assignment 1. A Brief History of HTTP. Mar 1989 - "Information Management: A Proposal " Oct 1990 - "WorldWideWeb" coined Oct 1994 - W3C founded May 1996 - RFC 1945 (HTTP 1.0) June 1999 - RFC 2616 (HTTP 1.1). Anatomy of HTTP 1.0. Web Client.

kalil
Download Presentation

Building a Simple Web Proxy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Building a Simple Web Proxy • COS 461 Assignment 1

  2. A Brief History of HTTP • Mar 1989 - "Information Management: A Proposal" • Oct 1990 - "WorldWideWeb" coined • Oct 1994 - W3C founded • May 1996 - RFC 1945 (HTTP 1.0) • June 1999 - RFC 2616 (HTTP 1.1)

  3. Anatomy of HTTP 1.0 Web Client Connect: Request Web Server GET / HTTP/1.0 Host: www.yahoo.com CRLF Response: Close HTTP/1.0 200 OK Date: Tue, 16 Feb 2010 19:21:24 GMT Content-Type: text/html; CRLF <html><head><title>Yahoo!</title>

  4. Anatomy of HTTP 1.0 Web Client Connect: Request Web Server Request Line Request Header Request Delimiter GET/HTTP/1.0 Host: www.yahoo.com CRLF Response: Close Response Status Response Header Response Delimiter Response Body HTTP/1.0200OK Date: Tue, 16 Feb 2010 19:21:24 GMT Content-Type: text/html; CRLF <html><head><title>Yahoo!</title>

  5. HTTP 1.1 vs 1.0 • Additional Methods (PUT, DELETE, TRACE, CONNECT + GET, HEAD, POST) • Additional Headers • Transfer Coding (chunk encoding) • Persistent Connections (content-length matters) • Request Pipelining

  6. Why Use a Proxy? Caching Content Filtering Privacy

  7. Building a Simple Web Proxy • Forward client requests to the remote server and return response to the client • Handle HTTP 1.0 (GET) • Multi-process, non-caching web proxy • ./proxy <port>

  8. Handling Requests • What you need from a client request: host, port, and URI pathGET http://www.princeton.edu:80/ HTTP/1.0 • What you send to a remote server:GET / HTTP/1.0Host: www.princeton.edu:80 Connection: close Check request line and header format

  9. Handling Responses Web Client Web Server Parse Request: Host, Port, Path Simple Proxy Forward Response to Client Including Errors

  10. Handling Errors • Method != GET: Not Implemented (501) • Unparseable request: Bad Request (400) • Parse using the Parsing library • Postel’s law: Be liberal in what you accept, and conservative in what you sendconvert HTTP 1.1 request to HTTP 1.0convert \r to \r\netc...

  11. Testing Your Proxy • Telnet to your proxy and issue a request> ./proxy 5000> telnet localhost 5000Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.GET http://www.google.com/ HTTP/1.0(HTTP response...) • Direct your browser to use your proxy • Use the supplied proxy_tester.py and proxy_tester_conc.py

  12. Proxy Guidance • Assignment page • Assignment FAQ • RFC 1945 (HTTP 1.0) • Google, wikipedia, man pages • Must build on Friend 010 machines

More Related