1. 程式人生 > >《HttpClient官方文件》2.1 連線永續性-2.2 HTTP連線路由

《HttpClient官方文件》2.1 連線永續性-2.2 HTTP連線路由

2.1. 連線永續性

一個主機與另一個主機建立連線的過程是相當複雜的,並且涉及兩個端點之間的多個分組交換,這可能相當耗時。尤其是對於較小的HTTP訊息來說,連線握手的開銷是很大的。如果開啟的連線能夠重用於執行多次請求,就可以實現更高的資料吞吐量。

HTTP/1.1協議規定每個預設的HTTP連線都可以重用於多次請求。 符合HTTP/1.0協議的端點同樣可以通過一種機制明示它們的優先權來維持連線的可用性並將其用於多次請求。
HTTP代理還可以維持空閒連線存活一段時間,以防後續請求需要用到同一目標主機的連線。 通常稱維持連線存活的能力為連線永續性,HttpClient完全支援這種能力。

2.2. HTTP連線路由

HttpClient能夠直接或通過可能包含多箇中間連線的路由-也稱為跳轉來建立到目標主機的連線。HttpClient 將連線路由區分為平面路由,隧道路由和分層路由。使用多箇中間代理來隧接到目標主機被稱為代理鏈。

平面路由通過連線到目標主機或僅一次的代理來建立。隧道路由通過代理鏈連線到首個隧道從而到達目標主機來建立。不通過代理的路由不能成為隧道路由。分層路由通過已有連線上面的分層協議來建立。 只有在到達目標主機的隧道,或者不通過代理的直連之上,協議才能被分層。

2.2.1. 路由計算

RouteInfo介面表示通過一個或多箇中間步驟或跳轉最終到達目標主機的的路由資訊。HttpRoute是RouteInfo介面的具體實現類, 這個類是不能被修改的(不可變的)。HttpTracker是RouteInfo介面的可變實現類,由HttpClient在內部使用於追蹤到最終路由目標主機的剩餘跳轉數。HttpTracker類可以在成功執行跳轉到下一個路由目標之後被更新。HttpRouteDirector類是一個幫助類,可用於計算路由中的下一步, 這個類在HttpClient內部使用。

HttpRoutePlanner是一個介面,表示基於執行上下文來計算到給定目標的完整路由的策略。HttpClient使用了兩個預設的HttpRoutePlanner介面實現類。 其中SystemDefaultRoutePlanner類是基於 java.net.ProxySelector類,預設情況下,它從系統屬性或執行應用程式的瀏覽器中獲取JVM的代理設定。而DefaultProxyRoutePlanner實現類不會使用任何的JAVA系統屬性,也不會使用系統或瀏覽器的代理設定。它總是通過同樣的預設代理來計算路由。

2.2.2. 安全的HTTP連線

如果在兩個連線端點之間傳輸的資訊不能被未經授權的第三方讀取或篡改,那麼HTTP連線可被認為是安全的。最普遍使用SSL / TLS協議這種技術確保HTTP傳輸安全性,不過也可以採用其他加密技術。一般HTTP傳輸通過SSL/TLS加密過的連線來分層。