
我最近參加了一場有關客戶端從代理伺服器請求頁面時會發生什麼情況的討論。我只是想確保我對這一系列事件的理解在一般情況下是正確的:
- 用戶請求網站
- DNS 請求由用戶端傳送至其配置的 DNS 伺服器以解析目標 IP 位址(首先執行此操作是為了適應配置為繞過代理程式的 HTTP 請求)
- 從 DNS 收到目標 IP 後,在發送 HTTP 請求之前,將根據例外清單檢查該請求
- 如果目標伺服器不在例外清單中,則請求將轉送至代理伺服器。
- 如果目標伺服器在例外清單中,則根據客戶端電腦的路由表轉送請求。
任何反饋將不勝感激。
答案1
不完全是:這取決於客戶端的配置方式。讓我們以 IE 作為基本範例。
如果您將 IE 設定為明確的代理人:例如,沒有勾選其他選項,代理設定為:8080。
使用者輸入地址
IE 檢查地址字串與 IE 代理例外清單匹配(即「繞過這些位址的代理:」)
A。如果它與中的條目匹配旁路清單, 這客戶用途有自己的DNS解析名稱,然後用戶端直接連接到目標IP位址在連接埠 80(假設)上,然後發送如下請求:
GET /something.htm HTTP/1.1
Host: fulldomainame.example.com
b.如果沒有符合的旁路清單條目, 繼續:
IE 連線到其配置的代理,並發送以下形式的請求:
GET http://fulldomainname.example.com/something.htm HTTP/1.1
額外的事實:這種使用URL 中的 FQDN這是你可以告訴客戶的一種方式想它正在與代理而不是真正的網路伺服器進行通信
代理解析該主機名使用它自己的DNS,然後連接到目標網站(就像上面步驟 2 中的用戶端一樣)等等。
使用 WPAD/PAC 時:
在使用 Web 代理程式自動發現 (WPAD) 或代理程式自動設定(PAC 或 Autoconfig)腳本(例如啟用自動設定時 ISA/TMG 提供的腳本)的情況下,情況有所不同:
使用者輸入地址
客戶下載目前的wpad.dat/autoproxy.js/.pac文件從其配置的位置
客戶端尋找函數“尋找 URL 代理" 在js檔案中,並執行它
Autoproxy 腳本處理主機名稱和網址。這是一個功能有限的 JavaScript 文件,但很多事情仍然是可能的:
A。這可能包括名稱解析(IsInNet,DnsResolve)
b.這可能包括字串匹配(ShExpMatch)
C。這可能包括數到一百萬(我++)
d.這可能包括討厭的警報彈出訊息如果管理員是個混蛋
- (或只是有趣)
- ((或調試))
這尋找 URL 代理函數至少回傳一個字串:可使用的最佳代理的有序列表(以分號分隔)
A。任何一個“直接的”,在這種情況下,客戶端需要解析名稱本身並直接連接,如上面的繞過情況
b.或者“PROXY 代理名稱:8080”或類似的,在這種情況下,客戶端連接到該代理上的該端口,告訴它取得完整網址,以及代理執行名稱解析。
- 作為一個例子:如果腳本函數返回“代理你的代理:8080;直接”告訴客戶端連接到你的代理在 TCP 連接埠上8080請求此 URL,並且如果那無法建立連接,請嘗試直接連接。 筆記TCP 會話設定失敗的速度並不快,因此這對使用者來說可能不是一個愉快的故障轉移體驗,但也沒有什麼比這更好的了。或許。
偶爾會出現小故障、微妙之處和無法解釋的行為,但在大多數情況下,當事情沒有以奇怪和有趣的方式破壞時,以上就是我多年來看到的它的工作方式。較新的瀏覽器正在優化行為、並行化內容,並一直嘗試有趣的事情,因此請查看給定瀏覽器的最新文件以了解詳細資訊。
WinSock 代理/ISA 防火牆用戶端/TMG 用戶端:
如果您對 Winsock 代理客戶端(來自 TMG/ISA 伺服器)感興趣,那就是另一回事了,它具有更大的靈活性和可移動的部件。這裡要講的內容太多了,但是有一些文件描述了它是如何運作的。簡而言之:它插入 Windows 套接字,並且可以基於每個應用程式和每個使用者攔截基於 TCP/UDP 的流量和名稱解析請求。非常強大,但現在也已棄用,並且已經好幾年沒有更新了。
客戶可能真的很黏人:
一最後的說明:一旦 HTTP 用戶端決定與給定網站/url 的代理對話,代理無法告訴它不要這樣做。
沒有 HTTP 狀態代碼或標頭“我不提供該服務,您應該直接訪問它”...
一旦用戶端決定對特定 URL 進行代理服務,代理死亡之握隨後發生。
避免這種情況的唯一方法是在客戶端建立連線之前在 PAC 或旁路清單中取得選擇邏輯。
關於區域和 PAC 檔案的最後說明
IE 處理的網站是直接的連線- 即使它們的URL 中有點- 成為本機Intranet 區域的一部分(預設- 可在區域屬性中設定),因此將執行諸如允許對這些網站進行整合Windows 驗證(即Kerberos 和/或NTLM 驗證)之類的操作,透明)。因此,控制某些內容是否位於本機 Intranet 區域中定義了它在自動身份驗證方面的可信程度。同樣,至少在預設情況下是這樣。
答案2
我不確定你的 DNS 部分是否正確。我見過一台沒有有效 DNS 伺服器的機器可以使用代理在 IE 中正常取得頁面。
答案3
我嘗試在ubuntu 10.04、wine、IE 6.0和squid 2.7(系統有一個dns,squid有其他dns伺服器)
- 用戶向代理發送請求
- Squid向DNS伺服器發送DNS請求
- Squid 接收 DNS 應答。如果 nxdomain 或其他錯誤,將錯誤頁面傳送到 IE。如果名稱解析,則取得頁面並將其提供給 IE。
IE 6.0 不解析 DNS 名稱。
答案4
我不認為是 - 如果您輸入 IP 和網域在例外列表中,或者網域和 IP 在例外列表中,它可能仍然會通過代理。
proxy.pac/wpad.dat 可能會讓您強制擺脫這種行為。