瀏覽器引擎預設:webkit內核 一、輸入地址 當我們開始在瀏覽器中輸入網址的時候,現代瀏覽器就可以智能的匹配完整 url了,它會從歷史記錄,書簽等地方,找到已經輸入的字元串可能對應的 url,然後給出智能提示,讓你可以補全url地址。 如果輸入的地址和候選項很匹配,在敲下回車之前,chromium ...
瀏覽器引擎預設:webkit內核
一、輸入地址
當我們開始在瀏覽器中輸入網址的時候,現代瀏覽器就可以智能的匹配完整 url了,它會從歷史記錄,書簽等地方,找到已經輸入的字元串可能對應的 url,然後給出智能提示,讓你可以補全url地址。
如果輸入的地址和候選項很匹配,在敲下回車之前,chromium就可以開始嘗試建立TCP鏈接,chrome 的瀏覽器,他甚至會直接從緩存中把網頁展示出來。
1、主機名擴展。將輸入的主機名擴展為完整的主機名,如輸入baidu,瀏覽器會嘗試插入www. 和 .com。但此技巧可能會為其他HTTP應用程式帶來問題,比如代理,詳見第6節。
2、歷史擴展。即從歷史記錄中進行匹配,給出完整的選項建議。
二、URL解析
URI:統一資源標識符,目前主要子集是URL統一資源定位符,另外還有處於試驗階段的URN統一資源名稱。
(一)URL組成
把URL分割成幾個部分:方案協議、主機名、資源路徑等。
協議是規定如何訪問指定資源的主要標識符,常見的是HTTP、HTTPS、FTP,不同協議有不同的通訊內容格式;
其中主機名指示伺服器的位置,可以是功能變數名稱或者IP地址,可以包括埠號,很多協議都有預設的埠號,HTTP的預設埠是80 ;
資源路徑指示資源位於服務前的什麼位置。
還有詳細的URL組件包括:
1、用戶名和密碼。例如FTP伺服器需要攜帶,如未提供,瀏覽器會插入預設的值。
2、參數。每個路徑段可以有自己的參數值。以分號;分割,key=value形式。
例如:
http://www.xxx.com/hammers;sale=false/index.html;graphics=true
3、查詢字元串。?item=1223
4、片段。URL的hash值,對於大型的文本頁面,可以指定資源的確定錨點位置。客戶端不會將其傳送給伺服器,瀏覽器獲取整個資源後,會根據hash值顯示指定的內容。它的改變不會向伺服器發送請求,單頁面應用常用於實現前端路由。
(二)相對URL
URL有兩種方式:絕對和相對的。絕對URL包含有訪問資源的全部信息。相對URL是不完整的,必須相對於另一個base基礎URL進行解析,可以保持一組資源的可移植性。
1、基本URL的形式,權重遞減:
在資源中顯式提供,html中的標記 <base>;封裝資源的URL。
2、解析相對引用。將其分解成組件,和基礎URL進行合併演算法。
(三)未來展望
PURL永久統一資源定位符,使用URL來實現URN功能的一個例子。在搜索資源的過程中引入另一個中間層,通過一個中間資源定位符伺服器對資源的實際URL進行登記和跟蹤。
三、DNS解析
(一)解析過程
Chromium中使用HostResolverImpl類來解析功能變數名稱,調用的函數是阻塞式的,使用單獨線程來處理它,所以對性能優化有一定的影響。
這一步包括 DNS 具體的查找過程,包括:瀏覽器緩存->系統緩存->路由器緩存...
1、 瀏覽器會檢查緩存中這個功能變數名稱對應的解析過的IP地址,如果緩存中有,這個解析過程就將結束。HostCache類可以保存解析後的功能變數名稱,最多時會有多達1000對功能變數名稱和IP的映射關係,對緩存的大小和時間都是有限制的。
2、 查找操作系統緩存中是否有這個功能變數名稱對應的DNS解析結果,在Windows中可以通過C:\Windows\System32\drivers\etc\hosts文件來設置。在開發或測試時可以將一個功能變數名稱解析到一臺測試伺服器上,這樣不用修改任何代碼就能測試到單獨伺服器上的代碼的業務邏輯是否正確。正是因為有這種本地DNS解析的規程,所以黑客就有可能通過修改你的功能變數名稱解析來把特定的功能變數名稱解析到它指定的IP地址上,導致這些功能變數名稱被劫持。
3、 查詢DNS功能變數名稱伺服器。網路配置中都會有"DNS伺服器地址",操作系統會把這個功能變數名稱發送給這裡設置的LDNS,也就是本地區的功能變數名稱伺服器。這個DNS通常都提供給你本地互聯網接入的一個DNS解析服務。這個專門的功能變數名稱解析伺服器,一般都會緩存功能變數名稱解析結果。大約80%的功能變數名稱解析都到這裡就已經完成了,所以LDNS主要承擔了功能變數名稱的解析工作。
4、 如果LDNS仍然沒有命中,就直接到Root Server功能變數名稱伺服器請求解析。
5、 根功能變數名稱伺服器返回給本地功能變數名稱伺服器一個所查詢域的主功能變數名稱伺服器(gTLD Server)地址。gTLD是國際頂級功能變數名稱伺服器,如.com、.cn、.org等,全球只有13台左右。
6、 本地功能變數名稱伺服器(Local DNS Server)再向上一步返回的gTLD伺服器發送請求。
7、 接受請求的gTLD伺服器查找並返回此功能變數名稱對應的Name Server功能變數名稱伺服器的地址,這個Name Server通常就是你註冊的功能變數名稱伺服器,例如你在某個功能變數名稱服務提供商申請的功能變數名稱,那麼這個功能變數名稱解析任務就由這個功能變數名稱提供商的伺服器來完成。
8、 Name Server功能變數名稱伺服器會查詢存儲的功能變數名稱和IP的映射關係表,正常情況下都根據功能變數名稱得到目標IP記錄,連同一個TTL值返回給DNS Server功能變數名稱伺服器。
9、 返回該功能變數名稱對應的IP和TTL值,Local DNS Server會緩存這個功能變數名稱和IP的對應關係,緩存的時間由TTL值控制。
10、 把解析的結果返回給用戶,用戶根據TTL值緩存在本地系統緩存中,功能變數名稱解析過程結束。
(二)DNS性能優化
1、減少連接重定向。多次解析,阻礙DNS預提取技術的應用。
2、DNS預取機制。開發者可以指定需要預取的URL,
<link rel=”dns-prefetch” href=”http://xxxx”>
3、 搭建支持SPDY協議的伺服器。
解決網路延遲和安全性問題,新的會話層協議,位於http與tcp之間。核心思想為多路復用,僅適用一個連接來傳輸一個網頁中的眾多資源,提高tcp連接的利用率;根據資源的特性和優先順序,可以調整這些資源請求的優先順序;適用壓縮技術,減少位元組數;發送網頁時,提前發送信息給瀏覽器,告知之後可能需要哪些內容
4、 避免錯誤、無用的鏈接請求,避免占用網路資源。