# 2020q3 專題: Proxy Lab contributed by < `fwfly` > ## 目標 ## 理解 根據 http://csapp.cs.cmu.edu/3e/proxylab.pdf 要求題目有三個 1. 實作簡單的 web proxy 須包含以下功能 1. 一次處理一個 http request 2. 實作/完成 http 1.0/1.1 GET request 2. 實作可同時處理多個 request 的 web proxy 3. 實作包含有 cache 功能的 web proxy ### 自動評分系統 透過執行 drive.sh 可以得到分數,滿分則表示完成以上三個需求 ### 初試 什麼都不做的直接跑程式,只會得到 timeout ``` $ ./driver.sh *** Basic *** Starting tiny on 22347 Starting proxy on 5255 Timeout waiting for the server to grab the port reserved for it Terminated ``` 因為 proxy.c 是空的,所以並不會有任何反應 ### 讓 proxy 動起來 基本上 proxy 跟 tiny 做的事情是差不多的,唯一的差別在於 tiny: 直接回應 request proxy: 把 request 丟給 tiny,然後用從 tiny 得到的 response 去回應原本的 request. 所以在 accept requests 的部分是相同的 基於以上的想法,可以直接把一部分 tiny 的程式碼複製貼上直接做實驗 唯一的差別是把 "doit" 的部分給拿掉 [程式碼](https://github.com/fwfly/proxylab/commit/375796940d06e380dea54aa2a0a40fe78fd82e4b) 然後透過 brower 測試可以得到以下結果 ``` $ ./proxy 8444 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.3) Gecko/20120305 Firefox/10.0.3 Accepted connection from (192.168.238.1, 57150) Accepted connection from (192.168.238.1, 57151) Accepted connection from (192.168.238.1, 57152) Accepted connection from (192.168.238.1, 57153) Accepted connection from (192.168.238.1, 57154) Accepted connection from (192.168.238.1, 57155) Accepted connection from (192.168.238.1, 57158) Accepted connection from (192.168.238.1, 57159) Accepted connection from (192.168.238.1, 57160) ``` ### 實作從 proxy 到 tiny ## 參考 - http://csapp.cs.cmu.edu/3e/labs.html