輸入url會發什什麼

從輸入url到頁面加載完成發生了什麼css

總體來講有幾個基本的點:跨域

1.瀏覽器的地址欄輸入url並按下回車瀏覽器

2.瀏覽器查找當前url是否存在緩存,並比較緩存是否過時緩存

3.DNS解析url對應的IP服務器

4.根據IP創建TCP鏈接(三次握手)加密

5.服務器端處理(動態頁面處理,靜態頁面返回。CDN相關)url

6.HTTP發起請求spa

7.服務器處理請求,瀏覽器接收HTTP響應對象

8.渲染頁面,構建DOM樹(收到HTML內容解析,並行加載串行執行執行CSSjsblog

9.請求頭內容緩存到瀏覽器端

10.關閉TCP鏈接,4次握手

1、URL:咱們常見的URL是由三部分組成,協議名,域名,端口號,有時候端口是默認因此隱藏,HTTP默認端口80HTTPS默認端口443,(同源問題和跨域問題)除此以外還會包括一些路徑,查詢和其餘片斷,咱們最多見的協議是HTTP協議,還有加密的HTTPS協議,FTP協議等等

2、緩存:HTTP緩存有多種規則,根據是否須要從新向服務器發起請求來分類,通常分爲強制緩存和對比緩存,強制緩存判斷HTTP首部字段:cache-control,Expires.Expires是一個絕對時間,即服務器時間。瀏覽器檢查當前時間,若是還沒到失效時間就直接使用緩存文件,可是該方法存在一個問題,服務器時間和客戶端時間可能不一致。Cache-control中的max-age保存一個相對時間,例如cache-control:max-age = 484200,表示瀏覽器收到文件後,緩存在484200s內有效,若是同時存在cache-controlExpires,瀏覽器老是優先使用cache-control.

對比緩存經過HTTPlast-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包,必須確認客戶的SYNack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

  第三次握手: 客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHEDTCP鏈接成功)狀態,完成三次握手。

  完成三次握手,客戶端與服務器開始傳送數據。

5、完整的HTTP請求包含請求起始行、請求頭部、請求主體三部分。

6、服務器在收到瀏覽器發送的HTTP請求以後,會將收到的HTTP報文封裝成HTTPRequest對象,並經過不一樣的Web服務器進行處理,處理完的結果以HTTPResponse對象返回,主要包括狀態碼,響應頭,響應報文三個部分。

  狀態碼主要包括如下部分

  1xx:指示信息–表示請求已接收,繼續處理。

  2xx:成功–表示請求已被成功接收、理解、接受。

  3xx:重定向–要完成請求必須進行更進一步的操做。

  4xx:客戶端錯誤–請求有語法錯誤或請求沒法實現。

  5xx:服務器端錯誤–服務器未能實現合法的請求。

  響應頭主要由Cache-ControlConnectionDatePragma等組成。

  響應體爲服務器返回給瀏覽器的信息,主要由HTMLcssjs,圖片文件組成。

7、若是說響應的內容是HTML文檔的話,就須要瀏覽器進行解析渲染呈現給用戶。整個過程涉及兩個方面:解析和渲染。在渲染頁面以前,須要構建DOM樹和CSSOM在瀏覽器還沒接收到完整的 HTML 文件時,它就開始渲染頁面了,在遇到外部鏈入的腳本標籤或樣式標籤或圖片時,會再次發送 HTTP 請求重複上述的步驟。在收到 CSS 文件後會對已經渲染的頁面從新渲染,加入它們應有的樣式,圖片文件加載完馬上顯示在相應位置。

8、關閉TCP鏈接或繼續保持鏈接經過四次揮手關閉鏈接(FIN ACK, ACK, FIN ACK, ACK)

 

第一次揮手是瀏覽器發完數據後,發送FIN請求斷開鏈接。第二次揮手是服務器發送ACK表示贊成,若是在這一次服務器也發送FIN請求斷開鏈接彷佛也沒有不妥,但考慮到服務器可能還有數據要發送,因此服務器發送FIN應該放在第三次揮手中。這樣瀏覽器須要返回ACK表示贊成,也就是第四次揮手。

相關文章
相關標籤/搜索