輸入url會發什什麽
從輸入url到頁面加載完成發生了什麽
整體來說有幾個基本的點:
1.瀏覽器的地址欄輸入url並按下回車
2.瀏覽器查找當前url是否存在緩存,並比較緩存是否過期
3.DNS解析url對應的IP
4.根據IP建立TCP連接(三次握手)
5.服務器端處理(動態頁面處理,靜態頁面返回。CDN相關)
6.HTTP發起請求
7.服務器處理請求,瀏覽器接收HTTP響應
8.渲染頁面,構建DOM樹(收到HTML內容解析,並行加載串行執行執行CSS,js)
9.請求頭內容緩存到瀏覽器端
10.關閉TCP連接,4次握手
一、URL:我們常見的URL是由三部分組成,協議名,域名,端口號,有時候端口是默認所以隱藏,HTTP
二、緩存:HTTP緩存有多種規則,根據是否需要重新向服務器發起請求來分類,一般分為強制緩存和對比緩存,強制緩存判斷HTTP首部字段:cache-control,Expires.Expires是一個絕對時間,即服務器時間。瀏覽器檢查當前時間,如果還沒到失效時間就直接使用緩存文件,但是該方法存在一個問題,服務器時間和客戶端時間可能不一致。Cache-control中的max-age保存一個相對時間,例如cache-control:max-age = 484200,
對比緩存通過HTTP的last-modified,Etag字段進行判斷,last-modified是第一次請求資源時,服務器返回的字段,表示最後一次更新的時間,下次瀏覽器請求資源時就發送if-modified-since字段,服務器用本地Last-modified時間與if-modified-since時間比較,如果不一致就認為緩存已過期並返回新資源給瀏覽器,如果時間一致就發送304狀態碼,讓瀏覽器繼續使用緩存。Etag:資源的實體標誌(哈西字符串),當資源內容更新時
三、域名解析的過程實際是將域名還原為IP地址的過程。首先瀏覽器先檢查本地hosts文件是否有這個網址映射關系,如果有就調用這個IP地址映射,完成域名解析。如果沒找到則會查找本地DNS解析器緩存,如果查找到則返回。如果還是沒有找到則會查找本地DNS服務器,如果查找到則返回。最後叠代查詢,按根域服務器 ->頂級域,.cn->第二層域,hb.cn ->子域,www.hb.cn的順序找到IP地址。
四、建立連接,這是由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連接成功)狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
五、完整的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 文件後會對已經渲染的頁面重新渲染,加入它們應有的樣式,圖片文件加載完立刻顯示在相應位置。
八、關閉TCP連接或繼續保持連接,通過四次揮手關閉連接(FIN ACK, ACK, FIN ACK, ACK)。
第一次揮手是瀏覽器發完數據後,發送FIN請求斷開連接。第二次揮手是服務器發送ACK表示同意,如果在這一次服務器也發送FIN請求斷開連接似乎也沒有不妥,但考慮到服務器可能還有數據要發送,所以服務器發送FIN應該放在第三次揮手中。這樣瀏覽器需要返回ACK表示同意,也就是第四次揮手。
輸入url會發什什麽