1. 程式人生 > >輸入url會發什什麽

輸入url會發什什麽

改變 隱藏 查找 建立 解析 輸入 http syn 什麽

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

整體來說有幾個基本的點:

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

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

3.DNS解析url對應的IP

4.根據IP建立TCP連接(三次握手)

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

6.HTTP發起請求

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

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

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

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

一、URL:我們常見的URL是由三部分組成,協議名,域名,端口號,有時候端口是默認所以隱藏,HTTP

默認端口80HTTPS默認端口443,(同源問題和跨域問題)除此之外還會包括一些路徑,查詢和其他片段,我們最常見的協議是HTTP協議,還有加密的HTTPS協議,FTP協議等等

二、緩存: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是否發生變化,如果變化則返回新資源。

三、域名解析的過程實際是將域名還原為IP地址的過程。首先瀏覽器先檢查本地hosts文件是否有這個網址映射關系,如果有就調用這個IP地址映射,完成域名解析。如果沒找到則會查找本地DNS解析器緩存,如果查找到則返回。如果還是沒有找到則會查找本地DNS服務器,如果查找到則返回。最後叠代查詢,按根域服務器 ->頂級域,.cn->第二層域,hb.cn ->子域,www.hb.cn的順序找到IP地址。

四、建立連接,這是由TCP協議完成的,主要通過三次握手進行連接。

  第一次握手: 建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;

  第二次握手: 服務器收到syn包,必須確認客戶的SYNack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

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

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

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

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

  狀態碼主要包括以下部分

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

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

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

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

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

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

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

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

八、關閉TCP連接或繼續保持連接通過四次揮手關閉連接(FIN ACK, ACK, FIN ACK, ACK)

 技術分享

第一次揮手是瀏覽器發完數據後,發送FIN請求斷開連接。第二次揮手是服務器發送ACK表示同意,如果在這一次服務器也發送FIN請求斷開連接似乎也沒有不妥,但考慮到服務器可能還有數據要發送,所以服務器發送FIN應該放在第三次揮手中。這樣瀏覽器需要返回ACK表示同意,也就是第四次揮手。

輸入url會發什什麽