一道经典面试题:从输入url到页面显示经历了什么?
這道題太經典了,因為它涉及到太多的知識點?;亓髦乩L、瀏覽器渲染原理、event loop 和 TCP連接斷開的方式等。
主要過程如下。
一、DNS解析:url解析成ip地址和對應的端口號
網絡進程會先從DNS數據緩存服務器查找是否緩存過當前域名信息,有則直接返回,否則,會進行DNS解析成對應的ip和端口號。
二、建立TCP連接:通過三次握手與服務器建立連接,然后進行數據傳輸
第一次握手,發送SYN報文。
客戶端主動向服務器發送請求建立連接的報文SYN,客戶端會隨機初始化一個序列號x,然后把SYN的標志置為1,之后客戶端處于SYN-SENT的狀態。
SYN=1 seq=x
第二次握手,發送SYN + ACK報文。
服務端接收到客戶端的報文后,服務端也會隨機初始化一個序列號y,對請求的應答做響應,即ack=x+1,接著把SYN和ACK的標志置為1,之后服務端處于SYN-RCVD狀態。
SYN=1 ACK=1 seq=y ack=x+1
第三次握手,發送ACK報文。
客戶端接受到服務端的報文后,對應答號進行回應ack=y+1,把ACK的標志置為1,序列號為x+1,返回確認的報文給服務端,服務端接到確認報文后進入連接的狀態,此時TCP連接成功。
ACK=1 ack=y+1 seq=x+1
三、客戶端發送HTTP請求:把輸入的地址封裝成HTTP Request請求行,發送給服務器
請求行 = 請求方法 + 請求url + HTTP版本 + 請求頭。
四、服務端返回資源
服務器收到請求后,響應報文,返回資源。
五、瀏覽器渲染頁面
1、html被html解析器解析成DOM Tree,css被css解析器解析成CSSOM Tree(并行解析);
2、DOM Tree 和 CSSOM Tree 合并到一起,形成 Render Tree ;
3、重排,根據渲染樹計算出每個節點的幾何信息,位置及大小;
4、重繪,繪制渲染出最終的頁面。
六、斷開TCP連接:通過四次揮手斷開連接
第一次揮手,發送FIN報文。
客戶端發送FIN=1,序列號seq=x的報文,進入FIN_WAIT_1的狀態。
第二次揮手,服務端發送ACK報文。
服務端接受到客戶端報文后,會給客戶端發送一個ACK的報文,表示收到了。服務端進入CLODED_WAIT狀態,客戶端進入FIN_WAIT_2狀態。
第三次揮手,服務端發送FIN報文。
服務端處理完數據,也會向客戶端發送一個FIN報文,服務端進入LAST_ACK狀態。
第四次揮手,客戶端發送ACK報文。
客戶端收到服務端FIN報文后,會向服務端發送一個ACK的報文,表示收到了。然后客戶端進入TIME_WAIT狀態,服務端收到ACK報文后進入CLOSED狀態。至此連接斷開。
總結
以上是生活随笔為你收集整理的一道经典面试题:从输入url到页面显示经历了什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA无法识别项目中的Java类
- 下一篇: 985大学计算机博士毕业发表论文,博士毕