在瀏覽器中輸入url到顯示網頁主要包含兩個部分: 網絡通訊和頁面渲染
互聯網內各網絡設備間的通訊都遵循TCP/IP協議,利用TCP/IP協議族進行網絡通訊時,會經過分層順序與對方進行通訊。分層由高到低分別爲:應用層、傳輸層、網絡層、數據鏈路層。發送端從應用層往下走,接收端從數據鏈路層網上走css
咱們常見的RUL是這樣的:www.baidu.com,域名一般由3部分組成:協議 域名 端口號
前端
涉及知識點: 跨域
在前端進行數據請求時,因爲瀏覽器的同源策略,協議,域名,端口號有一個不一樣會存在跨域請求,須要進行跨域處理,相關的跨域方法點擊user-gold-cdn.xitu.io/2018/11/19/…chrome
互聯網上每一臺計算機的惟一標識是它的IP地址,可是IP地址並不方便記憶。用戶更喜歡用方便記憶的網址去尋找互聯網上的其它計算機,也就是上面提到的百度的網址。因此互聯網設計者須要在用戶的方便性與可用性方面作一個權衡,這個權衡就是一個網址到IP地址的轉換,這個過程就是DNS解析,即實現了網址到IP地址的轉換跨域
DNS解析是一個遞歸查詢的過程。 瀏覽器
上述圖片是查找www.google.com的IP地址過程。首先在本地域名服務器中查詢IP地址,若是沒有找到的狀況下,本地域名服務器會向根域名服務器發送一個請求,若是根域名服務器也不存在該域名時,本地域名會向com頂級域名服務器發送一個請求,依次類推下去。直到最後本地域名服務器獲得google的IP地址並把它緩存到本地,供下次查詢使用。從上述過程當中,能夠看出網址的解析是一個從右向左的過程: com -> google.com -> www.google.com。可是你是否發現少了點什麼,根域名服務器的解析過程呢?事實上, 真正的網址是www.google.com.,並非我多打了一個.,這個.對應的就是根域名服務器,默認狀況下全部的網址的最後一位都是.,既然是默認狀況下,爲了方便用戶,一般都會省略,瀏覽器在請求DNS的時候會自動加上,全部網址真正的解析過程爲: . -> .com -> google.com. -> www.google.com.。DNS緩存和DNS負載均衡緩存
DNS存在着多級緩存,從離瀏覽器的距離排序的話,有如下幾種: 瀏覽器緩存,系統緩存,路由器緩存,IPS服務器緩存,根域名服務器緩存,頂級域名服務器緩存,主域名服務器緩存。服務器
在你的chrome瀏覽器中輸入:chrome://dns/,你能夠看到chrome瀏覽器的DNS緩存。網絡
系統緩存主要存在/etc/hosts(Linux系統)中: 負載均衡
真實的互聯網世界背後存在成千上百臺服務器,大型的網站甚至更多。可是在用戶的眼中,它須要的只是處理他的請求,哪臺機器處理請求並不重要。DNS能夠返回一個合適的機器的IP給用戶,例如能夠根據每臺機器的負載量,該機器離用戶地理位置的距離等等,這種過程就是DNS負載均衡,又叫作DNS重定向優化
在經過DNS域名解析後,獲取到了服務器的IP地址,在獲取到IP地址後,便會開始創建一次鏈接,這是由TCP協議完成的,主要經過三次握手進行鏈接。
完整的HTTP請求包含請求起始行、請求頭部、請求主體三部分。
服務器在收到瀏覽器發送的HTTP請求以後,會將收到的HTTP報文封裝成HTTP的Request對象,並經過不一樣的Web服務器進行處理,處理完的結果以HTTP的Response對象返回,主要包括狀態碼,響應頭,響應報文三個部分。
狀態碼主要包括如下部分:
1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操做。
4xx:客戶端錯誤–請求有語法錯誤或請求沒法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。
響應頭主要由Cache-Control、 Connection、Date、Pragma等組成。
響應體爲服務器返回給瀏覽器的信息,主要由HTML,css,js,圖片文件組成。
若是說響應的內容是HTML文檔的話,就須要瀏覽器進行解析渲染呈現給用戶。整個過程涉及兩個方面:解析和渲染。在渲染頁面以前,須要構建DOM樹和CSSOM樹。 在瀏覽器還沒接收到完整的 HTML 文件時,它就開始渲染頁面了,在遇到外部鏈入的腳本標籤或樣式標籤或圖片時,會再次發送 HTTP 請求重複上述的步驟。在收到 CSS 文件後會對已經渲染的頁面從新渲染,加入它們應有的樣式,圖片文件加載完馬上顯示在相應位置。在這一過程當中可能會觸發頁面的重繪或重排。這裏就涉及了兩個重要概念:Reflow和Repaint。
- Reflow,也稱做Layout,中文叫回流,通常意味着元素的內容、結構、位置或尺寸發生了變化,須要從新計算樣式和渲染樹,這個過程稱爲Reflow。
- Repaint,中文重繪,意味着元素髮生的改變只是影響了元素的一些外觀之類的時候(例如,背景色,邊框顏色,文字顏色等),此時只須要應用新樣式繪製這個元素就OK了,這個過程稱爲Repaint。
因此說Reflow的成本比Repaint的成本高得多的多。DOM樹裏的每一個結點都會有reflow方法,一個結點的reflow頗有可能致使子結點,甚至父點以及同級結點的reflow。
經過四次揮手關閉鏈接(FIN ACK, ACK, FIN ACK, ACK)。
- 第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
- 第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
- 第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
- 第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。