頁面從輸入URL到展現(xiàn)究竟發(fā)生了什么锣吼?

部分圖片會上傳失敗,為了良好的閱讀體驗建議查看github原文

1.DNS解析

我們在瀏覽器上輸入地址時杖玲,如www.qq.com顿仇,需要把這個地址解析成ip地址,其中就需要dns解析摆马。
DNS(Domain Name System)是域名系統(tǒng)的英文縮寫臼闻,他的服務(wù)是用來將主機名和域名轉(zhuǎn)換為ip地址的工作。

dns域名

dns域名

工作流程

瀏覽器在查找這個服務(wù)器ip的時候囤采,

  1. 首先尋找本地hosts文件是否有這個地址映射關(guān)系述呐,如果有就先調(diào)用這個ip地址映射,完成域名解析
  2. 如沒有蕉毯,瀏覽器發(fā)送請求到本地dns服務(wù)器乓搬,本地dns服務(wù)器由網(wǎng)絡(luò)運營商提供
  3. 查詢輸入的網(wǎng)址的dns請求到達本地dns服務(wù)器后, 則會先查詢他的緩存記錄代虾,有這條記錄則直接返回进肯;沒有則向dns根服務(wù)器進行查詢
  4. 根dns服務(wù)器沒有,則告訴本地dns服務(wù)器棉磨,向dns域服務(wù)器進行查詢江掩,并給出域服務(wù)器的地址
  5. 本地dns服務(wù)器繼續(xù)向域服務(wù)器發(fā)請求,域服務(wù)器收到請求后乘瓤,并不會直接返回域名和ip地址的對應(yīng)關(guān)系环形,而是告訴本地dns服務(wù)器,你的域名解析服務(wù)器的地址馅扣。
  6. 最后斟赚,本地dns服務(wù)器向域名的解析服務(wù)器發(fā)出請求,從而獲得一個ip地址和域名的對應(yīng)關(guān)系差油,將他返回給瀏覽器并將這個關(guān)系保存在緩存中
dns域名解析基本過程

2.發(fā)送HTTP請求

最終拿到ip地址拗军,瀏覽器根據(jù)這個ip地址和端口號構(gòu)造一個tcp連接請求任洞,這個請求通過各種路由設(shè)備后達到服務(wù)端,進入到網(wǎng)卡发侵,接著進入TCP/IP協(xié)議棧交掏,最終到達服務(wù)端web程序,建立TCP/IP的連接刃鳄。

建立了tcp連接后盅弛,發(fā)起一個http請求。一個典型的http請求頭包括請求方法(GET,POST,etc.)叔锐;還需要一些請求信息:請求方法和請求附帶的數(shù)據(jù)等挪鹏。

一個請求頭

3.服務(wù)器處理請求并返回HTTP報文

后端從固定的端口接收到tcp報文,對tcp鏈接進行處理愉烙,對http協(xié)議進行解析讨盒,按照報文格式進一步封裝為http request對象,這一部分地工作通常由web服務(wù)器進行處理步责。

http響應(yīng)頭也是由三部分組成:狀態(tài)碼返顺、響應(yīng)報頭、響應(yīng)報文蔓肯。

狀態(tài)碼

狀態(tài)碼由三位數(shù)字組成遂鹊,第一位數(shù)字代表響應(yīng)類別:

  1. 1xx 請求已接受,繼續(xù)處理(100:continue蔗包;101:Switching Protocols)

  2. 2xx 請求成功接受秉扑、處理、解析
    200:ok气忠;

    204 No Content 成功邻储,但不返回任何實體的主體部分;

    206 Partial Content 成功執(zhí)行了一個范圍(Range)請求

  3. 3xx 重定向 要完成的請求必須進行更進一步的操作

    301 Moved Permanently 永久性重定向旧噪,響應(yīng)報文的Location首部應(yīng)該有該資源的新URL

    302 Found 臨時性重定向吨娜,響應(yīng)報文的Location首部給出的URL用來臨時定位資源

    303 See Other 請求的資源存在著另一個URI,客戶端應(yīng)使用GET方法定向獲取請求的資源

    304 Not Modified 服務(wù)器內(nèi)容沒有更新淘钟,可以直接讀取瀏覽器緩存

    307 Temporary Redirect 臨時重定向宦赠。

  4. 4xx 客戶端錯誤 請求有語法錯誤或請求無法實現(xiàn)

    400 Bad Request 表示客戶端請求有語法錯誤,不能被服務(wù)器所理解

    401 Unauthonzed 表示請求未經(jīng)授權(quán)米母,該狀態(tài)代碼必須與 WWW-Authenticate 報頭域一起使用

    403 Forbidden 表示服務(wù)器收到請求勾扭,但是拒絕提供服務(wù),通常會在響應(yīng)正文中給出不提供服務(wù)的原因

    404 Not Found 請求的資源不存在铁瞒,例如妙色,輸入了錯誤的URL

  5. 5xx 服務(wù)端出錯 服務(wù)端未能處理合法的請求

    500 Internel Server Error 表示服務(wù)器發(fā)生不可預(yù)期的錯誤,導(dǎo)致無法完成客戶端的請求

    503 Service Unavailable 表示服務(wù)器當前不能夠處理客戶端的請求慧耍,在一段時間之后身辨,服務(wù)器可能會恢復(fù)正常

響應(yīng)報頭

響應(yīng)頭

響應(yīng)頭

響應(yīng)報文

通常就是服務(wù)器返回給瀏覽器的文本信息了丐谋,通常是html、css煌珊、js等靜態(tài)資源放在這里号俐。

4.瀏覽器解析渲染頁面

瀏覽器在收到html、css定庵、js等文件后吏饿,按照下圖的過程進行渲染:

解析html以構(gòu)建dom樹 -> 構(gòu)建render樹 -> 布局render樹 -> 繪制render樹

demo

解析渲染過程

當瀏覽器獲得html文件時,會“自上而下”地進行加載蔬浙,并在加載的過程中進行解析和渲染猪落。

  1. 瀏覽器先將html解析成一個dom樹,dom樹的構(gòu)建過程是一個深度遍歷的過程畴博,意思是必須加在完當前節(jié)點的所有子節(jié)點才能加載當前節(jié)點的下一個兄弟節(jié)點许布。
  2. 在解析過程中需要下載js或css等資源時,異步新建進程進行下載绎晃,并繼續(xù)把html解析成dom樹。
  3. 其中杂曲,js通過dom api修改dom庶艾,通過cssom api修改樣式作用到render tree上,css則解析為css rule擎勘。 tree咱揍,瀏覽器將css規(guī)則樹和dom樹結(jié)合起來構(gòu)建render tree。(在文檔加載過程中遇到j(luò)s文件棚饵,則會掛起渲染過程煤裙,等待js文件下載并解析之后,再繼續(xù)進行渲染T胙)
  4. 在渲染的過程中會出現(xiàn)回流(reflow)和重繪(repaint)

回流與重繪

回流(reflow)

只要修改了dom或改變了元素的形狀或大小等會改變布局的操作就會觸發(fā)reflow

重繪(repaint)

只是改變了顏色硼砰,不影響周圍元素或布局,會引起瀏覽器的重繪

減少reflow與repaint

  1. 不要一條一條的修改樣式欣硼,應(yīng)該固定寫一個class题翰,更換className,減少reflow次數(shù)
  2. 不要把 DOM 結(jié)點的屬性值放在一個循環(huán)里當成循環(huán)里的變量搅轿。
  3. 為動畫的 HTML 元件使用position:fixed 或 absolute 践叠,那么修改他們的 CSS 是不會 reflow 的憔购。
  4. 避免使用table布局,一個很小的改動會造成整個table reflow血公!

6.連接結(jié)束

參考文檔

  1. 【原】老生常談-從輸入url到頁面展示到底發(fā)生了什么
  2. 瀏覽器加載、解析缓熟、渲染的過程
  3. 瀏覽器加載網(wǎng)頁時的過程是什么累魔? - 陳金的回答 - 知乎
  4. 前端經(jīng)典面試題: 從輸入URL到頁面加載發(fā)生了什么摔笤?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市薛夜,隨后出現(xiàn)的幾起案子籍茧,更是在濱河造成了極大的恐慌,老刑警劉巖梯澜,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寞冯,死亡現(xiàn)場離奇詭異,居然都是意外死亡晚伙,警方通過查閱死者的電腦和手機吮龄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咆疗,“玉大人漓帚,你說我怎么就攤上這事∥绱牛” “怎么了尝抖?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅皇。 經(jīng)常有香客問我昧辽,道長,這世上最難降的妖魔是什么登颓? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任搅荞,我火速辦了婚禮,結(jié)果婚禮上框咙,老公的妹妹穿的比我還像新娘咕痛。我一直安慰自己,他們只是感情好喇嘱,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布茉贡。 她就那樣靜靜地躺著,像睡著了一般者铜。 火紅的嫁衣襯著肌膚如雪块仆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天王暗,我揣著相機與錄音悔据,去河邊找鬼。 笑死俗壹,一個胖子當著我的面吹牛科汗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绷雏,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼头滔,長吁一口氣:“原來是場噩夢啊……” “哼怖亭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坤检,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤兴猩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后早歇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倾芝,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年箭跳,在試婚紗的時候發(fā)現(xiàn)自己被綠了晨另。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡谱姓,死狀恐怖借尿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屉来,我是刑警寧澤路翻,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站茄靠,受9級特大地震影響帚桩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘹黔,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莫瞬。 院中可真熱鬧儡蔓,春花似錦、人聲如沸疼邀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旁振。三九已至获询,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拐袜,已是汗流浹背吉嚣。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹬铺,地道東北人尝哆。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像甜攀,于是被迫代替她去往敵國和親秋泄。 傳聞我的和親對象是個殘疾皇子琐馆,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容