從輸入url到頁面加載完成發生了什麼css
總體來講有幾個基本的點:跨域
1.瀏覽器的地址欄輸入url並按下回車瀏覽器
2.瀏覽器查找當前url是否存在緩存,並比較緩存是否過時緩存
3.DNS解析url對應的IP服務器
4.根據IP創建TCP鏈接(三次握手)加密
5.服務器端處理(動態頁面處理,靜態頁面返回。CDN相關)url
6.HTTP發起請求spa
7.服務器處理請求,瀏覽器接收HTTP響應對象
8.渲染頁面,構建DOM樹(收到HTML內容解析,並行加載串行執行執行CSS,js)blog
9.請求頭內容緩存到瀏覽器端
10.關閉TCP鏈接,4次握手
1、URL:咱們常見的URL是由三部分組成,協議名,域名,端口號,有時候端口是默認因此隱藏,HTTP默認端口80,HTTPS默認端口443,(同源問題和跨域問題)除此以外還會包括一些路徑,查詢和其餘片斷,咱們最多見的協議是HTTP協議,還有加密的HTTPS協議,FTP協議等等
2、緩存:HTTP緩存有多種規則,根據是否須要從新向服務器發起請求來分類,通常分爲強制緩存和對比緩存,強制緩存判斷HTTP首部字段:cache-control,Expires.Expires是一個絕對時間,即服務器時間。瀏覽器檢查當前時間,若是還沒到失效時間就直接使用緩存文件,可是該方法存在一個問題,服務器時間和客戶端時間可能不一致。Cache-control中的max-age保存一個相對時間,例如cache-control:max-age = 484200,表示瀏覽器收到文件後,緩存在484200s內有效,若是同時存在cache-control和Expires,瀏覽器老是優先使用cache-control.
對比緩存經過HTTP的last-modified,Etag字段進行判斷,last-modified是第一次請求資源時,服務器返回的字段,表示最後一次更新的時間,下次瀏覽器請求資源時就發送if-modified-since字段,服務器用本地Last-modified時間與if-modified-since時間比較,若是不一致就認爲緩存已過時並返回新資源給瀏覽器,若是時間一致就發送304狀態碼,讓瀏覽器繼續使用緩存。Etag:資源的實體標誌(哈西字符串),當資源內容更新時Etag會改變,服務器會判斷Etag是否發生變化,若是變化則返回新資源。
3、域名解析的過程實際是將域名還原爲IP地址的過程。首先瀏覽器先檢查本地hosts文件是否有這個網址映射關係,若是有就調用這個IP地址映射,完成域名解析。若是沒找到則會查找本地DNS解析器緩存,若是查找到則返回。若是仍是沒有找到則會查找本地DNS服務器,若是查找到則返回。最後迭代查詢,按根域服務器 ->頂級域,.cn->第二層域,hb.cn ->子域,www.hb.cn的順序找到IP地址。
4、創建鏈接,這是由TCP協議完成的,主要經過三次握手進行鏈接。
第一次握手: 創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;
第二次握手: 服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手: 客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP鏈接成功)狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
5、完整的HTTP請求包含請求起始行、請求頭部、請求主體三部分。
6、服務器在收到瀏覽器發送的HTTP請求以後,會將收到的HTTP報文封裝成HTTP的Request對象,並經過不一樣的Web服務器進行處理,處理完的結果以HTTP的Response對象返回,主要包括狀態碼,響應頭,響應報文三個部分。
狀態碼主要包括如下部分
1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操做。
4xx:客戶端錯誤–請求有語法錯誤或請求沒法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。
響應頭主要由Cache-Control、 Connection、Date、Pragma等組成。
響應體爲服務器返回給瀏覽器的信息,主要由HTML,css,js,圖片文件組成。
7、若是說響應的內容是HTML文檔的話,就須要瀏覽器進行解析渲染呈現給用戶。整個過程涉及兩個方面:解析和渲染。在渲染頁面以前,須要構建DOM樹和CSSOM樹。在瀏覽器還沒接收到完整的 HTML 文件時,它就開始渲染頁面了,在遇到外部鏈入的腳本標籤或樣式標籤或圖片時,會再次發送 HTTP 請求重複上述的步驟。在收到 CSS 文件後會對已經渲染的頁面從新渲染,加入它們應有的樣式,圖片文件加載完馬上顯示在相應位置。
8、關閉TCP鏈接或繼續保持鏈接,經過四次揮手關閉鏈接(FIN ACK, ACK, FIN ACK, ACK)。
第一次揮手是瀏覽器發完數據後,發送FIN請求斷開鏈接。第二次揮手是服務器發送ACK表示贊成,若是在這一次服務器也發送FIN請求斷開鏈接彷佛也沒有不妥,但考慮到服務器可能還有數據要發送,因此服務器發送FIN應該放在第三次揮手中。這樣瀏覽器須要返回ACK表示贊成,也就是第四次揮手。