1. 程式人生 > >前端面試題:從url到頁面展現,這之中發生了什麼?

前端面試題:從url到頁面展現,這之中發生了什麼?

輸入網址

我們平常在位址列裡輸入一些網址時,頁面很快就會出現,但在這之中到底發生了什麼事情呢?

大概是這樣的流程:

  • 在瀏覽器的位址列中敲入了url
  • 域名解析
  • 伺服器處理請求
  • 瀏覽器處理
  • 繪製網頁

一、在瀏覽器的位址列中敲入了url

首先,我們要知道url是什麼?

URL(Uniform Resource Locator),統一資源定位符,用於定位網際網路上的資源,實際上就是網站網址。url的格式一般為:

協議型別://<主機名>:<埠>/<路徑>/檔名

其中協議型別可以是http(超文字傳輸協議)、https、ftp(檔案傳輸協議)、telnet(遠端登入協議)、file等等。而http是最常見的網路傳輸協議,https則是進行加密的網路傳輸。

例如,我的簡書url為http://www.jianshu.com/u/b473784d730c,其中,“http”表示與web伺服器通訊採用http協議,簡書web伺服器域名為www.jianshu.comu/b473784d730c表示所訪問的檔案存在於web伺服器上的路徑。

url格式中主機名冒號後面的數字是埠編號,因為一臺計算機常常會同時作為Web,FTP等伺服器,埠編號用來告訴web伺服器所在的主機要將請求交給哪個服務。預設情況下http服務的埠為80,不需要在url中輸入,如果web伺服器採用的不是這一個預設埠,就需要寫明服務所用的埠。常見的協議預設埠如下:

協議型別 預設埠
http 80
ftp 21
https 443
telnet 23

IP是什麼

IP是因特網中的每臺連線到網路的計算機為實現相互通訊而遵循的規則協議。每個處於網際網路中的裝置都有IP 地址,形如 192.168.0.1,而127.0.0.1代表本機的 IP。IP又分為區域網IP和公網IP。而區域網 IP 和公網 IP 是有差別的。每個網站就是靠IP來定位的。

為了便於記憶或辨識,人們使用域名來登入網站,每個域名背後有對應的IP地址。

比如對於 http://www.jianshu.com的URL,瀏覽器實際上不知道 www.jianshu.com

到底是什麼東西,需要查詢www.jianshu.com網站所在伺服器的IP地址,才能找到目標,這就是下文要說的域名解析。

二、域名解析

當用戶在瀏覽器中輸入url後,你使用的電腦會發出一個DNS請求到本地DNS伺服器。本地DNS伺服器一般都是你的網路接入伺服器商提供,比如中國電信,中國移動,DNS請求到達本地DNS伺服器之後會有以下幾個步驟:

  • 查詢瀏覽器快取

瀏覽器會檢查快取中有沒有這個域名對應的解析過的IP地址,如果快取中有,這個解析過程就將結束。Chrome瀏覽器看本身的DNS快取時間比較方便,在位址列輸入chrome://net-internals/#dns,就可以看到了

  • 查詢作業系統快取

如果使用者的瀏覽器快取中沒有,瀏覽器會從hosts檔案查詢是否有儲存DNS資訊,查詢是否有目標域名和對應的IP地址

  • 查詢路由器快取

如果系統快取中也找不到,那麼查詢請求就會發向路由器,路由器一般會有自己的DNS快取。

  • 查詢ISP(Internet Service Provider) DNS 快取

如果路由器快取中也找不到,那麼就查詢ISP DNS 快取伺服器了。
我們都知道在我們的網路配置中都會有”DNS伺服器地址”這一項,作業系統會把這個域名傳送給這裡設定的DNS,比如114.114.114.114,也就是本地區的域名伺服器,通常是提供給你接入網際網路的應用提供商。而114.114.114.114是國內移動、電信和聯通通用的DNS。

  • 迭代查詢

如果前面都找不到DNS快取的話,會有以下幾個步驟:

  • 本地 DNS伺服器將該請求轉發到網際網路上的根域(根域沒有名字,在DNS系統中就用一個空字串來表示。例如www.baidu.com.現在的DNS系統都不會要求域名以.來結束,即www.baidu.com就可以解析了,但是現在很多DNS解析服務商還是會要求在填寫DNS記錄的時候以.來結尾域名。)
  • 根域將所要查詢域名中的頂級域(比如要查詢www.baidu,com,該域名的頂級域就是com)的伺服器IP地址返回到本地DNS。
  • 本地DNS根據返回的IP地址,再向頂級域(就是com域)傳送請求, com域伺服器再將域名中的二級域(即www.baidu.com中的baidu.com)的IP地址返回給本地DNS。
  • 本地DNS再向二級域傳送請求進行查詢。
  • 之後不斷重複這樣的過程,直到本地DNS伺服器得到最終的查詢結果,並返回到主機。這時候主機才能通過域名訪問該網站。
    下圖能很好的說明這個迭代查詢:

當查詢到對應的IP地址之後,通過IP地址查詢到對應的伺服器,瀏覽器將使用者發起的http請求傳送給伺服器。例如:GET http://www.baidu.com/ HTTP/1.1

三、伺服器處理請求

每臺伺服器上都會安裝處理請求的應用——Web server。常見的web server產品有apachenginxIISLighttpd等。

當web server接收到一個HTTP請求(request),會返回一個HTTP響應(response),例如送回一個HTML頁面。對於不同使用者傳送的請求,會結合配置檔案,把不同請求委託給伺服器上處理對應請求的程式進行處理(例如CGI指令碼,JSP指令碼,servlets,ASP指令碼,伺服器端JavaScript,或者一些其它的伺服器端技術等)。

無論它們(指令碼)的目的如何,這些伺服器端(server-side)的程式通常產生一個HTML的響應(response)來讓瀏覽器可以瀏覽。

那麼如何處理請求?實際上就是後臺處理的工作。後臺開發現在有很多框架,但大部分都還是按照MVC設計模式進行搭建的。

處理的過程如下圖:


MVC的處理過程是這樣的:對於每一個使用者輸入的請求,首先被控制器接收,控制器決定用哪個模型來進行處理,然後模型用業務邏輯來處理使用者的請求並返回資料,最後控制器確定用哪個檢視模型,用相應的檢視格式化模型返回html字串給瀏覽器,並通過顯示頁面呈現給使用者。

四、瀏覽器處理

接下來就是瀏覽器進行處理, 通過後臺處理返回的HTML字串被瀏覽器接受後被一句句讀取解析,html頁面經歷載入、解析、渲染。

  • 載入

    瀏覽器對一個html頁面的載入順序是從上而下的。如果載入過程中遇到外部css檔案,瀏覽器另外發出一個請求,來獲取css檔案。遇到圖片資源,瀏覽器也會另外發出一個請求,來獲取圖片資源。但是當文件載入過程中遇到js檔案,html文件會掛起渲染(載入解析渲染同步)的執行緒,不僅要等待文件中js檔案載入完畢,還要等待解析執行完畢,才可以恢復html文件的渲染執行緒。

  • 解析

    解析文件是指將文件轉化成為有意義的結構,也就是可讓程式碼理解和使用的結構。解析得到的結果通常是代表了文件結構的節點樹,它稱作解析樹或者語法樹,也就是DOM樹。如下圖:

    css解析將css檔案解析為樣式表物件。如下圖:

    js解析檔案在載入的同時也進行解析
    如果想深入如何解析的話可以看瀏覽器的工作原理:新式網路瀏覽器幕後揭祕這篇文章

  • 渲染

    即為構建渲染樹的過程,就是將DOM樹進行視覺化表示。構建這棵樹是為了以正確的順序繪製文件內容。

五、繪製網頁

瀏覽器根據 HTML 和 CSS 計算得到渲染樹,最終繪製到螢幕上

由於本人的能力有限,如果哪裡寫的不對的話,請指出!感謝您的觀看

相關推薦

端面試題url頁面展現之中發生什麼?

我們平常在位址列裡輸入一些網址時,頁面很快就會出現,但在這之中到底發生了什麼事情呢? 大概是這樣的流程: 在瀏覽器的位址列中敲入了url 域名解析 伺服器處理請求 瀏覽器處理 繪製網頁 一、在瀏覽器的位址列中敲入了url 首先

url頁面展現之中發生什麼?

大概是這樣的流程: 在瀏覽器的位址列中敲入了url 域名解析 伺服器處理請求 瀏覽器處理 繪製網頁 一、在瀏覽器的位址列中敲入了url 首先,我們要知道url是什麼? URL(Uniform Resource Locator),統一資源定位符,用於定

端面試題JS中的let和var的區別

blog ocs undefine define 規範 target {} 擁有 comment 最近很多前端的朋友去面試被問到let和var的區別,其實阮一峰老師的ES6中已經很詳細介紹了let的用法和var的區別。我簡單總結一下,以便各位以後面試中使用。 ES6 新增

深入淺出經典面試題瀏覽器中輸入URL頁面載入發生什麼 - Part 2

備註: 因為文章太長,所以將它分為三部分,本文是第二部分。 第一部分:深入淺出經典面試題:從瀏覽器中輸入URL到頁面載入發生了什麼 - Part 1 TCP連線 DNS解析返回域名的IP之後,接下來就是瀏覽器要和該IP建立TCP連線了。為什麼是TCP而不是UDP?那是因為HTTP是基於TCP上的。

深入淺出經典面試題瀏覽器中輸入URL頁面載入發生什麼 - Part 3

深入淺出經典面試題:從瀏覽器中輸入URL到頁面載入發生了什麼 - Part 3 備註: 因為文章太長,所以將它分為三部分,本文是第三部分。 第一部分:深入淺出經典面試題:從瀏覽器中輸入URL到頁面載入發生了什麼 - Part 1 第二部分:深入淺出經典面試題:從瀏覽器中輸入URL到頁

web端面試題系列(二)

html name 價值 編程 oct rom repeat 清除 frame 1、列舉你工作中遇到的IE6 BUG,談談解決方案 a.雙倍邊距bug: 例如:當給父元素內第一個浮動元素設置margin-left或margin-right的時候,margin屬性會加倍,

前端乾貨端面試題彙總(推薦收藏)

  HTML Doctype作用?嚴格模式與混雜模式如何區分?它們有何意義? HTML5 為什麼只需要寫 <!DOCTYPE HTML>? 行內元素有哪些?塊級元素有哪些? 空(void)元素有那些? 頁面匯入樣式時,使用link和@i

一道經典端面試題再來看閉包

for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i) }, i * 1000) } 上面這個內容會列印什麼? 看過這題的都會知道答案,每隔一秒列印一個5,列印5次。如果我想將每一

端面試題(二)ES6中letconst和 var 三者的區別

let命令基本用法 在ES6中,新增了let命令,用於宣告變數,用來取代ES5中var命令,消除var宣告的變數的不合理,不嚴謹之處。const用於宣告常量。 讓我們來看看let和var的區別 1.let不存在變數提升 使用let宣告的變數,不會像

端面試題(一)如何解決使用inline-block引起的空白間隙的問題

使用inline-block代替float的討論也蠻多的,最常說的就是使用inline-block來代替float進行佈局,或者使用 inline-block來實現元素的居中效果。但是inline-block會引起元素和元素之間幾個畫素的間隙(具體間隙大小取決於

端面試題總結HTML5JSCSS3相容性。

1、 請寫出至少20個HTML5標籤 <article><aside> <audio><video> <canvas><datalist><command> <details&g

端面試題(來自前端網http://www.qdfuns.com/notes/23515/c9163ddd620baac5dd23141d41982bb8.html)

設置 session hat eval 減少 還需要 height 狀態碼 一次 HTML&CSS 1. 常用那幾種瀏覽器測試?有哪些內核(Layout Engine)? (Q1)瀏覽器:IE,Chrome,FireFox,Safari,Opera。 (Q2)內核

端面試題二(來自前端網http://www.qdfuns.com/notes/23515/fa8b1e788ac39b04108fc33e5b543c4a.html)

scrip border cal 搜索引擎 val 媒體 分配 error 不刷新 HTML&CSS 1.請描述一下 cookies,sessionStorage 和 localStorage 的區別? cookie是網站為了標示用戶身份而儲存在用戶本地終端(Cl

js操作符類型轉換大全(端面試題之操作符)

ber 出錯 mas java http pos ted 一個數 類型轉換 操作符運算符,在前端的面試題目中經常出現,很多朋友在對其運算的時候經常出錯。說明對操作符運算還沒有完全理解,我前面的一篇文章,javascript雙等號引起的類型轉換,主要講解雙等號引起的類型轉換。

web端面試題

案例 asc eva nbsp != radi XML vertica 意義 面試有幾點需註意 面試題目: 根據你的等級和職位變化,入門級到專家級:範圍↑、深度↑、方向↑。 題目類型: 技術視野、項目細節、理論知識題,算法題,開放性題,案例題。 進行追問:

最近面試端面試題整理(css部分)

type list 定位 text -c padding 面試 lang vertical 對最近面試的面試題坐下總結: 一,css部分 1,html元素的垂直居中 答案: <div id="box"> <div> 測

2017端面試題之Css篇(1)

margin 沒有 width ati clas 經驗 visible import tom 1 . CSS 屬性是否區分大小寫? 答:不區分。 HTML,CSS都對大小寫不敏感,但為了更好的可讀性和團隊協作一般都小寫,而在XHTML 中元素名稱和屬性是必須小寫的。

2017端面試題之Html篇(1)

utf doctype clas 停止 要求 驅動 抓取 -c 顯示錯誤 1 . doctype(文檔類型) 的作用是什麽? 對文檔進行有效性驗證: 它告訴用戶代理和校驗器這個文檔是按照什麽DTD 寫的。這個動作是被動的, 每次頁面加載時,瀏覽器並不會下載DTD

2017端面試題之Js篇(1)

load urn lis property eat hub bind tlist 方法的參數 1 . 請解釋事件代理 (event delegation) 當需要對很多元素添加事件的時,可以通過將事件添加到它們的父節點通過委托來觸發處理函數。其中利用到了瀏覽器的事件冒

web端面試題整理(HTML篇)

pad 關閉 選擇 words vid onunload adding per end 1. h5的改進: 新元素畫布canvas: HTML5 <canvas>元素用於圖形的繪制,通過腳本 (通常是JavaScript)來完成音頻audio視頻vid