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

瀏覽器引擎默認:webkit內核javascript

1、輸入地址

  當咱們開始在瀏覽器中輸入網址的時候,現代瀏覽器就能夠智能的匹配完整 url了,它會從歷史記錄,書籤等地方,找到已經輸入的字符串可能對應的 url,而後給出智能提示,讓你能夠補全url地址。html

  若是輸入的地址和候選項很匹配,在敲下回車以前,chromium就能夠開始嘗試創建TCP連接,chrome 的瀏覽器,他甚至會直接從緩存中把網頁展現出來。前端

  一、主機名擴展。將輸入的主機名擴展爲完整的主機名,如輸入baidu,瀏覽器會嘗試插入www. 和 .com。但此技巧可能會爲其餘HTTP應用程序帶來問題,好比代理,詳見第6節。java

      二、歷史擴展。即從歷史記錄中進行匹配,給出完整的選項建議。web

 

2、URL解析

  URI:統一資源標識符,目前主要子集是URL統一資源定位符,另外還有處於試驗階段的URN統一資源名稱。算法

 

  (一)URL組成

  把URL分割成幾個部分:方案協議、主機名、資源路徑等。chrome

    協議是規定如何訪問指定資源的主要標識符,常見的是HTTP、HTTPS、FTP,不一樣協議有不一樣的通信內容格式;瀏覽器

    其中主機名指示服務器的位置,能夠是域名或者IP地址,能夠包括端口號,不少協議都有默認的端口號,HTTP的默認端口是80 ;緩存

    資源路徑指示資源位於服務前的什麼位置。安全

  還有詳細的URL組件包括:

  一、用戶名和密碼。例如FTP服務器須要攜帶,如未提供,瀏覽器會插入默認的值。

  二、參數。每一個路徑段能夠有本身的參數值。以分號;分割,key=value形式。

  例如:

http://www.xxx.com/hammers;sale=false/index.html;graphics=true

 

  三、查詢字符串。?item=1223

  四、片斷。URL的hash值,對於大型的文本頁面,能夠指定資源的肯定錨點位置。客戶端不會將其傳送給服務器,瀏覽器獲取整個資源後,會根據hash值顯示指定的內容。它的改變不會向服務器發送請求,單頁面應用經常使用於實現前端路由。

 

  (二)相對URL

  URL有兩種方式:絕對和相對的。絕對URL包含有訪問資源的所有信息。相對URL是不完整的,必須相對於另外一個base基礎URL進行解析,能夠保持一組資源的可移植性。

  一、基本URL的形式,權重遞減:

     在資源中顯式提供,html中的標記 <base>;封裝資源的URL。

  二、解析相對引用。將其分解成組件,和基礎URL進行合併算法。

  

  (三)將來展望

  PURL永久統一資源定位符,使用URL來實現URN功能的一個例子。在搜索資源的過程當中引入另外一箇中間層,經過一箇中間資源定位符服務器對資源的實際URL進行登記和跟蹤。

 

3、DNS解析

  (一)解析過程

  Chromium中使用HostResolverImpl類來解析域名,調用的函數是阻塞式的,使用單獨線程來處理它,因此對性能優化有必定的影響。

  這一步包括 DNS 具體的查找過程,包括:瀏覽器緩存->系統緩存->路由器緩存...

  一、  瀏覽器會檢查緩存中這個域名對應的解析過的IP地址,若是緩存中有,這個解析過程就將結束。HostCache類能夠保存解析後的域名,最多時會有多達1000對域名和IP的映射關係,對緩存的大小和時間都是有限制的。

  二、  查找操做系統緩存中是否有這個域名對應的DNS解析結果,在Windows中能夠經過C:\Windows\System32\drivers\etc\hosts文件來設置。在開發或測試時能夠將一個域名解析到一臺測試服務器上,這樣不用修改任何代碼就能測試到單獨服務器上的代碼的業務邏輯是否正確。正是由於有這種本地DNS解析的規程,因此黑客就有可能經過修改你的域名解析來把特定的域名解析到它指定的IP地址上,致使這些域名被劫持。

  三、  查詢DNS域名服務器。網絡配置中都會有"DNS服務器地址",操做系統會把這個域名發送給這裏設置的LDNS,也就是本地區的域名服務器。這個DNS一般都提供給你本地互聯網接入的一個DNS解析服務。這個專門的域名解析服務器,通常都會緩存域名解析結果。大約80%的域名解析都到這裏就已經完成了,因此LDNS主要承擔了域名的解析工做。

  四、  若是LDNS仍然沒有命中,就直接到Root Server域名服務器請求解析。

  五、  根域名服務器返回給本地域名服務器一個所查詢域的主域名服務器(gTLD Server)地址。gTLD是國際頂級域名服務器,如.com、.cn、.org等,全球只有13臺左右。

  六、  本地域名服務器(Local DNS Server)再向上一步返回的gTLD服務器發送請求。

  七、  接受請求的gTLD服務器查找並返回此域名對應的Name Server域名服務器的地址,這個Name Server一般就是你註冊的域名服務器,例如你在某個域名服務提供商申請的域名,那麼這個域名解析任務就由這個域名提供商的服務器來完成。

  八、  Name Server域名服務器會查詢存儲的域名和IP的映射關係表,正常狀況下都根據域名獲得目標IP記錄,連同一個TTL值返回給DNS Server域名服務器。

  九、  返回該域名對應的IP和TTL值,Local DNS Server會緩存這個域名和IP的對應關係,緩存的時間由TTL值控制。

  十、 把解析的結果返回給用戶,用戶根據TTL值緩存在本地系統緩存中,域名解析過程結束。

  

  (二)DNS性能優化

  一、減小鏈接重定向。屢次解析,阻礙DNS預提取技術的應用。

       二、DNS預取機制。開發者能夠指定須要預取的URL,

                   <link rel=」dns-prefetch」 href=」http://xxxx」>

  三、  搭建支持SPDY協議的服務器。

  解決網絡延遲和安全性問題,新的會話層協議,位於http與tcp之間。核心思想爲多路複用,僅適用一個鏈接來傳輸一個網頁中的衆多資源,提升tcp鏈接的利用率;根據資源的特性和優先級,能夠調整這些資源請求的優先級;適用壓縮技術,減小字節數;發送網頁時,提早發送信息給瀏覽器,告知以後可能須要哪些內容

  四、  避免錯誤、無用的連接請求,避免佔用網絡資源。

相關文章
相關標籤/搜索