什么是HTTP代理?
為什么需要使用HTTP代理?
既然你都來到這兒了,相信你肯定是在寫爬蟲。
如果你所爬的網站不愿意讓你采集數據,那么在后端程序員眼中,能夠作為判斷依據的,都有哪些數據呢?
-
IP協議:客戶端IP地址、端口號
-
HTTP協議:X-Forward-For頭、User-Agent頭、Referer、URL、URL參數
從某種角度上說,沒有什么數據是無法偽造的。但偽造數據是有成本的。爬蟲和反爬與其說是在技術上做對抗,不如說是在成本上做對抗。
這些數據哪個偽造成本是最高的? IP地址。
為什么IP地址難以偽造?
首先,對于IP協議層,IP地址是可以偽造的,只需要在發包的時候修改源IP就可以了。
這也是SYN-Flood DDoS攻擊時,攻擊方經常采取的策略。
可是與UDP協議不同,HTTP協議所依賴的TCP協議是需要雙向通信的。
想象一下,你寫信填寫一個假的發件人地址,對方收到這個信之后,通過你的發件人地址來回信,那么你肯定無法接到回信。
無法建立雙向通信, 就無法建立TCP連接,也就無法產生一個有效的HTTP請求。
什么是HTTP代理?
既然IP地址無法偽造,那么我是否可以利用中間人轉發的方式隱藏我的真實IP來源?
當然可以。
讓我們想象一下,假設你的女朋友因為生氣不理你了,拉黑了你的微信,那你怎么向他認錯?
你肯定不假思索的說,當然是通過她的閨蜜幫你轉達啦。
那在爬蟲系統中,HTTP代理所起的作用,和閨蜜的作用是一樣的。
它的原理說起來簡單的不能再簡單:接受你的HTTP請求,再把你的HTTP請求發送出去,那么在被爬網站看來,這個請求不是你發出的,而是代理服務器發出的。
這就好比,你生氣的女朋友會拉黑你,但是她不會拉黑她的閨蜜,所以你的信息可以兜兜轉轉發給你的女朋友,是一樣一樣的。
HTTP代理的協議是否有標準?
HTTP代理的定義早在HTTP協議設計之初,就已經被大佬們考慮在內了。
根據IETF協會的RFC7230 2.3節,代理的定義有以下三種
-
代理(Proxy)
????????一種由客戶端選擇的報文轉發代理(message-forwarding agent)。按照一定規則讓請求通過同一個中轉。
-
網關(Gateway)
????????又稱為反向代理(Reverse Proxy)。對于出站連接來說,網關就像是源服務器。經常被用于攔截不被信任的服務、提高服務器性能、負載均衡等等。
-
隧道(Tunnel)
????????通常被用于建立一條虛擬的連接。通過這條連接的報文不會發生變化。
-
透明代理(Transparent Proxy)
????????不是由客戶端選擇的代理。例如在路由器上建立代理,電腦的瀏覽器感知不到這個代理。
在HTTP代理的類型中,我們實現了哪種代理?
我們實現了代理(Proxy)和隧道(Tunnel)。
其中,代理(Proxy)用來實現HTTP協議轉發,隧道(Tunnel)用來實現HTTPS協議的轉發。
為什么需要有兩種方式轉發HTTP協議和HTTPS協議?
我們將會在未來的文章(HTTP代理的安全性問題)中詳細說明。
結論
在這篇文章中,我們詳細解釋了為什么需要使用HTTP代理的原因、什么是HTTP代理和HTTP代理的工作原理。在1997年定義的HTTP代理協議,截止到2022年,仍然是最流行的IP地址隱藏方式,因為它在設計之初就已經考慮得十分周全,它還將繼續在爬蟲系統中扮演重要角色。
最后說一下隊友寫的2808Proxy使用Golang實現了完整的HTTP代理協議,在我們的實際測試中,它可以在帶寬允許的情況下穩定地實現單機百萬并發,為爬蟲系統提供了堅實保障。
總結
以上是生活随笔為你收集整理的什么是HTTP代理?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于CNN+tensorflow对搜狐新
- 下一篇: 数据结构教程(c语言)(已完结)