HTTP協議 (五) ---代理
HTTP協議 (五) 代理
什麽是代理服務器
Web代理(proxy)服務器是網絡的中間實體。 代理位於Web客戶端和Web服務器之間,扮演“中間人”的角色。
HTTP的代理服務器即是Web服務器又是Web客戶端。
Fiddler就是個典型的代理
Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1, 端口:8888. 當Fiddler退出的時候它會自動註銷代理,這樣就不會影響別的程序。
代理的作用一, FQ
很多人都喜歡用Facebook, 看youTube。但是我們在天朝,天朝有The Great of Wall(長城防火墻),屏蔽了這些好網站。 怎麽辦? 通過代理來跳墻,就可以訪問了。
自己去尋找代理服務器很麻煩, 一般都是用FQ軟件來自動發現代理服務器的。
代理的作用二, 匿名訪問
經常聽新聞,說”某某某“在網絡上發布帖子,被跨省追緝了。 假如他使用匿名的代理服務器,就不容易暴露自己的身份了。
http代理服務器的匿名性是指: HTTP代理服務器通過刪除HTTP報文中的身份特性(比如客戶端的IP地址, 或cookie,或URI的會話ID), 從而對遠端服務器隱藏原始用戶的IP地址以及其他細節。 同時HTTP代理服務器上也不會記錄原始用戶訪問記錄的log(否則也會被查到)。
代理的作用三, 通過代理上網
比如局域網不能上網, 只能通過局域網內的一臺代理服務器上網。
代理的作用四, 通過代理緩存,加快上網速度
大部分代理服務器都具有緩存的功能,就好像一個大的cache, 它有很大的存儲空間,它不斷將新取得數據存儲到它本地的存儲器上, 如果瀏覽器所請求的數據在它本機的存儲器上已經存在而且是最新的,那麽它就不重新從Web服務器取數據,而直接將存儲器上的數據傳給用戶的瀏覽器,這樣就 能顯著提高瀏覽速度。
代理的作用五:兒童過濾器
很多教育機構, 會利用過濾器代理來阻止學生訪問成人內容。
IE代理設置:手動設置代理
IE瀏覽器可以手動設置代理, 很簡單,指定一個IP地址和端口就可以了。 如下圖。
工具 -> Internet選項 -> 連接 -> 局域網設置 (快捷鍵)
假如代理服務器的IP地址改變了,或者端口號改變了。 難道要幾百個客戶端的瀏覽器去修改瀏覽器設置? Impossable 這太難維護了。 下面還有一種更高級點的方法。
IE代理設置:使用自動配置腳本(PAC)
手動配置代理很簡單,但是不靈活。 只能指定一個代理服務器,而且不支持故障轉移。
在大公司裏一般都使用PAC文件來配置。只需要指定PAC文件的URL就可以了, 如圖:
PAC(Proxy Auto Config)文件是一個小型的JavaScript程序的文本文件,後綴為.dat。
當瀏覽器訪問網絡的時候,會根據PAC文件中的JavaScript函數來選擇恰當的代理服務器。
sample_pac.dat文件的內容
function FindProxyForURL(url, host) {
if (url.substring(0, 5) == "http:") {
// 應該使用指定的代理
return "PROXY proxy:80";
}
else if (url.substring(0, 4) == "ftp:") {
return "PROXY fproxy:80";
}
else if (url.substring(0, 7) == "gopher:") {
return "PROXY gproxy";
}
else if (url.substring(0, 6) == "https:") {
return "PROXY secproxy:8080";
}
else {
// 直連,不經過任何代理
return "DIRECT";
}
}
IE代理設置:自動探測設置(WPAD)
瀏覽器只要選中“自動檢測設置”, 就可以使用WPAD協議, WPAD會自動找到PAC文件的URL。 WPAD會使用一系列的資源發現技術(DHCP,DNS等)去尋找PAC文件。
代理認證,和407狀態碼
代理服務器也可以需要權限認證, HTTP定義了一種名為代理認證(Proxy authentication)的機制。 這種機制可以阻止對內容的請求。
當瀏覽器訪問需要認證的代理時, 代理服務器會返回407 Authorization Required,告訴瀏覽器輸入用戶名和密碼。
代理認證跟HTTP基本認證是一樣的機制, 如需了解代理認證的機制,請看[HTTP協議基本認證]
使用代理服務器的安全問題
代理服務器和抓包工具(比如Fiddler)都能看到http request中的數據。 如果我們發送的request中有敏感數據,比如用戶名,密碼,信用卡號碼。這些信息都會被代理服務器看到。所以非常危險。 所以我們一般都是用HTTPS來加密Http request. 這樣代理服務器就看不到裏面的數據了。
如何搭建代理服務器
可以使用CCproxy, 和Squid 來搭建代理服務器。
HTTP協議 (五) ---代理