2016-09-27 111 views
-1

我正在爲瀏覽器製作代理應用程序。它只能使用標準庫。到目前爲止,我已經設法創建了服務器。當試圖從客戶端訪問網頁時,我得到了以下信息:Java獨立代理程序

CONNECT gmail.com:443 HTTP/1.1 的User-Agent:Mozilla的/ 5.0火狐/ 49.0 代理連接:保持活躍 連接:保持活躍 主機:gmail.com:443

我的問題是:爲了處理請求使用什麼?如何處理文件下載?

回答

1

一旦你拿到CONNECT命令,做什麼是問:創建上游連接,並返回適當的成功/失敗反應。如果上游連接成功,您現在要做的就是同時在兩個方向上覆制字節。端點將處理所有SSL問題,上傳,下載等。您無需擔當其他角色。

-1

代理的一般行爲如下:

  1. 從瀏覽器
  2. 接收請求,請對實際服務器的請求,解決所有重定向如果有必要
  3. 從服務器獲取和passit響應在客戶端

我沒有進入改變請求/響應頭,緩存等併發症

現在從上面,您正在與gmail.com refer進行SSL連接。

瀏覽器實際上發送的請求是正確的,在這種情況下,您需要實施握手,並使用HTTPS卸載SSL連接到gmail,並通過與瀏覽器協商的SSL將瀏覽器收到的響應發送給瀏覽器。

的建議是使用HTTP,而不是HTTPS,如果這不是一個生產平地機的系統,並嘗試了第一的理念

+0

這是不正確的,它不是它在你的[鏈接]中說的(http://stackoverflow.com/questions/11697943/when-should-one-use-connect-and-get-http-methods-at -http代理服務器)。 – EJP

+0

該鏈接是關於CONNECT請求的參考和一些細節 – Ironluca

+0

您的鏈接正確地說'使用SSL(HTTPS),只有兩個遠程端點了解請求,並且代理無法解密它們。因此,它所做的一切就是使用CONNECT打開該隧道,並讓兩個端點(網絡服務器和客戶端)直接對話,這與您的答案相矛盾:特別是關於「在您的一側卸載SSL」的部分。 – EJP