Atitit. http 代理原理 ?atiHttpProxy ?大木馬

Atitit. http 代理原理 ?atiHttpProxy ?大木馬

?

?

1. 面這張圖可以清晰地闡明HttpProxy的實現原理:1

2. 代理服務器用途1

3. 其中流程具體如下:2

4. 設計規劃3

5. 結束語4

?

?

1.?面這張圖可以清晰地闡明HttpProxy的實現原理:?


2.?代理服務器用途

代理服務器看成是一種擴展瀏覽器功能的途徑。例如,在把數據發送給瀏覽器之前,可以用代理服務器壓縮數據

調試器

數據搜集器

木馬病毒

3.?其中流程具體如下:

?
1、客戶端通過瀏覽器向代理服務器發送HttpRequest(GET/POST);
2、代理服務器讀取請求頭,抽取出請求的具體目標服務器HOST和PORT;
3、代理服務器把請求頭發送給目標服務器;
4、代理服務器建立管道,供客戶端和目標服務器通過兩個Socket通信。

?

?

不管以哪種方式應用代理服務器,其監控HTTP傳輸的過程總是如下:

·?步驟一:內部的瀏覽器發送請求給代理服務器。請求的第一行包含了目標URL

·?步驟二:代理服務器讀取該URL,并把請求轉發給合適的目標服務器。

·?步驟三:代理服務器接收來自Internet目標機器的應答,把應答轉發給合適的內部瀏覽器。

例如,假設有一個企業的雇員試圖訪問www.cn.ibm.com網站。如果沒有代理服務器,雇員的瀏覽器打開的Socket通向運行這個網站的Web服 務器,從Web服務器返回的數據也直接傳遞給雇員的瀏覽器。如果瀏覽器被配置成使用代理服務器,則請求首先到達代理服務器;隨后,代理服務器從請求的第一 行提取目標URL,打開一個通向www.cn.ibm.comSocket。當www.cn.ibm.com返回應答時,代理服務器把應答轉發給雇員的 瀏覽器。

當然,代理服務器并非只適用于企業環境。作為一個開發者,擁有一個自己的代理服務器是一件很不錯的事情。例如,我們可以用代理服務器來分析瀏覽器和Web 服務器的交互過程。測試和解決Web應用中存在的問題時,這種功能是很有用的。我們甚至還可以同時使用多個代理服務器(大多數代理服務器允許多個服務器鏈 接在一起使用)。例如,我們可以有一個企業的代理服務器,再加上一個用Java編寫的代理服務器,用來調試應用程序。但應該注意的是,代理服務器鏈上的每 一個服務器都會對性能產生一定的影響。

?

?

4.?設計規劃

正如其名字所示,代理服務器只不過是一種特殊的服務器。和大多數服務器一樣,如果要處理多個請求,代理服務器應該使用線程。下面是一個代理服務器的基本規劃:

1.?等待來自客戶(Web瀏覽器)的請求。

2.?啟動一個新的線程,以處理客戶連接請求。

3.?讀取瀏覽器請求的第一行(該行內容包含了請求的目標URL)。

4.?分析請求的第一行內容,得到目標服務器的名字和端口。

5.?打開一個通向目標服務器(或下一個代理服務器,如合適的話)的Socket

6.?把請求的第一行發送到輸出Socket

7.?把請求的剩余部分發送到輸出Socket

8.?把目標Web服務器返回的數據發送給發出請求的瀏覽器。

當然,如果考慮細節的話,情況會更復雜一些。實際上,這里主要有兩個問題要考慮:第一,從Socket按行讀取數據最適合進一步處理,但這會產生性能瓶 頸;第二,兩個Socket之間的連接必需高效。有幾種方法可以實現這兩個目標,但每一種方法都有各自的代價。例如,如果要在數據進入的時候進行過濾,這 些數據最好按行讀取;然而,大多數時候,當數據到達代理服務器時,立即把它轉發出去更適合高效這一要求。另外,數據的發送和接收也可以使用多個獨立的線 程,但大量地創建和拆除線程也會帶來性能問題。因此,對于每一個請求,我們將用一個線程處理數據的接收和發送,同時在數據到達代理服務器時,盡可能快速地 把它轉發出去。

?

?

?

當代理服務器連接到Web服務器之后,我用一個簡單的循環在兩個Socket之間傳遞數據。這里可能出現一個問題,即如果沒有可操作的數據,調用read 方法可能導致程序阻塞,從而掛起程序。為防止出現這個問題,我用setSoTimeout方法設置了Socket的超時時間(參見Listing 2)。這樣,如果某個Socket不可用,另一個仍舊有機會進行處理,我不必創建一個新的線程。

?

?

和所有線程對象一樣,HttpProxy類的主要工作在run方法內完成(見Listing 2)。run方法實現了一個簡單的狀態機,從Web瀏覽器每次一個讀取字符,持續這個過程直至有足夠的信息找出目標Web服務器。然后,run打開一個通 向該Web服務器的Socket(如果有多個代理服務器被鏈接在一起,則run方法打開一個通向鏈里面下一個代理服務器的Socket)。打開 Socket之后,run先把部分的請求寫入Socket,然后調用pipe方法。pipe方法直接在兩個Socket之間以最快的速度執行讀寫操作。

如果數據規模很大,另外創建一個線程可能具有更高的效率;然而,當數據規模較小時,創建新線程所需要的開銷會抵消它帶來的好處。

Listing 3顯示了一個很簡單的main方法,可以用來測試HttpProxy類。大部分的工作由一個靜態的startProxy方法完成(見Listing 4)。這個方法用到了一種特殊的技術,允許一個靜態成員創建HttpProxy類(或HttpProxy類的子類)的實例。它的基本思想是:把一個 Class對象傳遞給startProxy類;然后,startProxy方法利用映像APIReflection API)和getDeclaredConstructor方法確定該Class對象的哪一個構造函數接受一個Socket參數;最 后,startProxy方法調用newInstance方法創建該Class對象。

?

?

利用這種技術,我們可以在不創建startProxy方法定制版本的情況下,擴展HttpProxy類。要得到給定類的Class對象,只需在正常的名字 后面加上.class(如果有某個對象的一個實例,則代之以調用getClass方法)。由于我們把Class對象傳遞給了startProxy方法,所 以創建HttpProxy的派生類時,就不必再特意去修改startProxy。(下載代碼中包含了一個派生得到的簡單代理服務器)。

?

?

5.?結束語

利用派生類定制或調整代理服務器的行為有兩種途徑:修改主機的名字,或者捕獲所有通過代理服務器的數據。processHostName方法允許代理服務 器分析和修改主機名字。如果啟用了日志記錄,代理服務器為每一個通過服務器的字符調用writeLog方法。如何處理這些信息完全由我們自己決定――可以 把它寫入日志文件,可以把它輸出到控制臺,或進行任何其他滿足我們要求的處理。writeLog輸出中的一個Boolean標記指示出數據是來自瀏覽器還 是Web主機。

和許多工具一樣,代理服務器本身并不存在好或者壞的問題,關鍵在于如何使用它們。代理服務器可能被用于侵犯隱私,但也可以阻隔偷窺者和保護網絡。即使代理 服務器和瀏覽器不在同一臺機器上,我也樂意把代理服務器看成是一種擴展瀏覽器功能的途徑。例如,在把數據發送給瀏覽器之前,可以用代理服務器壓縮數據;未 來的代理服務器甚至還可能把頁面從一種語言翻譯成另一種語言……可能性永無止境。

?

?

多線程Http代理服務器 Java實現 - 獨上高樓 - ITeye技術網站.htm

用Java開發代理服務器.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284968.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉]一文揭秘阿里、騰訊、百度的薪資職級

上周,阿里巴巴董事長兼CEO逍遙子發布內部郵件,宣布了阿里巴巴新一輪組織部晉升名單,涉及所有晉升到P10、P11、P12的高P的人員。其中晉升到M7/ P12的高級管理者包括:淘寶、天貓、阿里媽媽事業群總裁蔣凡、阿里本地生活服務公司CEO王…

C語言試題188之實現strcspn函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

【ArcGIS微課1000例】0014:ArcGIS中如何將kml(kmz)文件轉shp,并進行投影轉換?

KML(Keyhole Markup Language,Keyhole 標記語言)最初是由Google 旗下的Keyhole 公司開發和維護的一種基于XML 的標記語言,利用XML 語法格式描述地理空間數據(如點、線、面、多邊形和模型等),適合網絡環境下的地理信息協作與共享。2008 年4月,KML的最新版本2.2 被OGC 宣布為開…

寫一鍵部署bash腳本

因為我開源的一鍵部署應用到linux服務器的AntDeploy, 在linux部署是需要安裝一個agent服務(systemctl服務)如果是手動第一次安裝的話 需要敲下載 wget解壓 tar修改配置文件的token復制到指定安裝目錄設置權限設置systemd設置systemctl清除臨時文件至少這8中類型的命…

UITableView的使用及代理方法

在App開放中我們經常會使用到UITabbleView&#xff0c;常用于數據展示。那么使用時不得不引入兩個代理方法<UITableViewDataSource,UITableViewDelegate>。 下面我們來簡單的創建一個TableView并介紹下其基本屬性。 property (nonatomic,strong) UITableView * myTable; …

Java集合和泛型練習及面試題——博客園:師妹開講啦

給定一段JAVA代碼如下&#xff1a;要打印出list中存儲的內容&#xff0c;以下語句正確的是&#xff08; B &#xff09; ArrayList list new ArrayList( ) list.add(“a”) list.add(“b”) Iterator it list.iterator( ) A.while(it. Next( ) )   system.out.prin…

對于經常需要truncate的表進行固定統計信息

為什么80%的碼農都做不了架構師&#xff1f;>>> 大家做過統計的一些存儲過程可能會知道&#xff0c;我們經常有這類表&#xff0c;要先truncate它&#xff0c;執行插入&#xff0c;再在執行相關sql&#xff0c;這就會導致有一個時間誤差&#xff0c;如果在truncate…

ArcGIS實驗教程——實驗四十一:ArcGIS區域分析統計直方圖(土地利用--坡度分級柱狀統計圖的制作)

文章目錄 一、任務描述二、實驗數據三、實驗過程一、任務描述 在實際工作中,通常需要統計不同類型的土地利用數據與坡度的關系。本實驗中以土地利用landuse和數字高程模型dem數據為例,基于ArcGIS平臺,統計了村莊、風景名勝、林地、草地、旱地等多種類型土地利用數據所占用的…

[轉]圖片格式WEBP全面解析

前言 不管是 PC 還是移動端&#xff0c;圖片一直是流量大頭&#xff0c;以蘋果公司 Retina 產品為代表的高 PPI 屏對圖片的質量提出了更高的要求&#xff0c;如何保證在圖片的精細度不降低的前提下縮小圖片體積&#xff0c;成為了一個有價值且值得探索的事情。 但如今對于 JP…

C語言試題189之編寫一個程序,按照下圖中的樣子創建數據結構,最后三個對象都是動態分配的結構。第一個對象則可能是一個靜態的指向結構的指針

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 編寫一…

基于.NetCore開發博客項目 StarBlog - (15) 生成隨機尺寸圖片

系列文章基于.NetCore開發博客項目 StarBlog - (1) 為什么需要自己寫一個博客&#xff1f;基于.NetCore開發博客項目 StarBlog - (2) 環境準備和創建項目基于.NetCore開發博客項目 StarBlog - (3) 模型設計基于.NetCore開發博客項目 StarBlog - (4) markdown博客批量導入基于.N…

【初探移動前端開發03】jQuery Mobile(上)

前言到目前為止&#xff0c;我打了幾天醬油了&#xff0c;這幾天落實了工作&#xff0c;并且看了一部電視連續劇&#xff08;陳道明-手機&#xff09;&#xff0c;我很少看連續劇了&#xff0c;但是手機質量很高啊&#xff0c;各位可以看看。我們今天先學習一下jquery mobile的…

Git Bash的一些命令和配置

查看git版本號&#xff1a; git --version 如果是第一次使用Git&#xff0c;你需要設置署名和郵箱&#xff1a; $ git config --global user.name "用戶名" $ git config --global user.email "電子郵箱" 檢查你的設置 $ git config --list 或單獨檢查一項…

/dev/null 文件

/dev/null 文件 如果希望執行某個命令&#xff0c;但又不希望在屏幕上顯示輸出結果&#xff0c;那么可以將輸出重定向到 /dev/null&#xff1a; $ command > /dev/null /dev/null 是一個特殊的文件&#xff0c;寫入到它的內容都會被丟棄&#xff1b;如果嘗試從該文件讀取內容…

C語言試題190之實現函數在第一個參數中進行查找,并返回匹配第二個參數所包含的字符的數目

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現函…

強大的多列 IN 查詢語句,及數據庫支持情況。

SQL 中最強大的也是最復雜的就是查詢部分。在需要查詢多條記錄時我們一般會采用 in 關鍵字來指定要查詢的條件&#xff1a;SELECT * FROM t_user WHERE uid IN (1,2,3,4,5,6,7,8,9);但如果對應的數據需要兩個或更多字段才能確定&#xff0c;可能會寫出以下的 SQL 語句&#xff…

ArcGIS實驗教程——實驗四十二:ArcGIS密度分析(核密度、點密度、線密度)

文章目錄 一、密度分析原理二、點密度分析三、線密度分析四、核密度分析一、密度分析原理 密度分析是指根據輸入的要素數據集計算整個區域的數據聚集狀況,從而產生一個聯系的密度表面。通過密度計算,將每個采樣點的值散步到整個研究區域,并獲得輸出柵格中每個像元的密度值。…

Log4Net的WebApplication使用

一、Log4Net的WebApplication使用 1、首先使用nuget 添加log4Net 到WebApplication項目中 log4j每個符號的具體含義&#xff1a;%d %5p %c{1}:%L - %m%n log4j.properties# %m 輸出代碼中指定的消息# %p 輸出優先級&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&…

C語言試題191之實現strcat函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

eclipse啟動tomcat無法訪問

癥狀&#xff1a; tomcat在eclipse里面能正常啟動&#xff0c;而在瀏覽器中訪問http://localhost:8080/不能訪問&#xff0c;且報404錯誤。同時其他項目頁面也不能訪問。 關閉eclipse里面的tomcat&#xff0c;在tomcat安裝目錄下雙擊startup.bat手動啟動tomcat服務器。訪問htt:…