1. 程式人生 > >從輸入url到頁面(一):URL與DNS

從輸入url到頁面(一):URL與DNS

ava .cn 控制 tp服務器 兩種 網絡配置 占用 index 相對

瀏覽器引擎默認: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、 避免錯誤、無用的鏈接請求,避免占用網絡資源。

從輸入url到頁面(一):URL與DNS