一、從地址欄輸入URL到頁面加載完成發生了什麼?
- 瀏覽器開啓一個線程來處理這個請求,對URL判斷如果是http協議就按照web方式處理
- 瀏覽器先查看瀏覽器緩存-系統緩存-路由器緩存,如果緩存中有,會直接在屏幕中顯示頁面內容(此時沒有向服務端發請求)。若沒有,則進行下一步操作(後面需要向服務端發送請求)
- 過DNS解析獲取網址的IP地址
- 向真實IP地址服務器發起tcp連接,與瀏覽器建立tcp三次握手
- 握手成功後,進行HTTP協議會話,瀏覽器發送報頭(請求報頭)
- 進入到web服務器上的 Web Server,如 Apache、Tomcat、Node.JS 等服務器
- 進入部署好的後端應用,如 PHP、Java、JavaScript、Python 等,找到對應的請求處理
- 處理結束回饋報頭,將數據返回至瀏覽器
- 瀏覽器開始下載html文檔(響應報頭,狀態碼200),同時設置緩存
- 之後瀏覽器對整個 HTML 結構進行解析,形成 DOM 樹;與此同時,它還需要對相應的 CSS 文件進行解析,形成 CSS 樹(CSSOM)。接下來,需要結合 DOM + CSSOM,渲染形成一個繪製樹(Render Tree)
- 得到繪製樹之後,需要計算每個結點在頁面中的位置,這一個過程稱爲layout
- layout的過程是在一個連續的二維平面上進行的,接下來,需要將這些結果柵格化,映射到屏幕的離散二維平面上,這一過程稱爲 paint ; 現代瀏覽器爲提升性能,將頁面劃分多個 layer,各自進行 paint 然後組合成一個頁面(composite layers)
二、TCP和UDP
- TCP是面向連接的運輸層協議;UDP是無連接的,即發送數據之前不需要建立鏈接,因此減少了開銷和發送數據的時延
- TCP提供可靠交付的服務,通過TCP連接傳送的數據,無差錯、不丟失、不重複、並且按時到達;UDP使用最大努力交付,即不保證可靠性交付,因此主機不需要維持複雜的連接狀態
- TCP面向字節流,TCP中的“流”指的是流入到進程或從進程流出的字節序列;UDP是面向報文的,發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付IP層
- UDP沒有擁塞控制,因此網絡出現的擁塞不會使源主機的發送速率降低,符合很多實時應用(如IP電話、實時視頻會議等)的要求
- 每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的;UDP支持一對一、一對多、多對一和多對多的交互通信
- UDP的首部開銷小,只有8個字節,比TCP的20個字節的首部短
- TCP提供可靠的全雙工通信(雙向實時通信),TCP允許通信雙方的應用進程在任何時候都能發送數據;UDP是不可靠信道
三、請求方式
- GET請求在瀏覽器回退時是無害的,POST會再次提交請求
- GET請求產生的URL地址可以被收藏,而POST不可以
- GET請求會被瀏覽器主動緩存,而POST不會,除非手動設置
- GET請求只能進行URL編碼,而POST支持多種編碼方式
- GET請求參數會被完整的保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留
- GET請求在URL中傳遞的參數是有長度限制的(不固定,因瀏覽器決定),而POST沒有限制
- GET請求只接受ASC2字符,而對參數的數據類型POST沒有限制
- GET請求比POST更不安全,因爲參數直接暴露在URL上,所以不能用來傳遞敏感數據
- GET請求參數通過URL傳遞,而POST放在request.body上
四、cookie、localStorage、sessionStorage區別
- 從數據生命週期上來說
• cookie:一般由服務器端生成,可設置失效時間,如果在瀏覽器端生成cookie,則默認關閉瀏覽器後失效。
• localStorage: 永久保存,除非被清除。
• sessionStorage: 僅在當前會話下有效,關閉頁面或者瀏覽器被清除。 - 從數據存儲方面來說
• cookie大小爲4KB左右
• storage一般爲5MB - 從與服務器端通信方面
• cookie每次都會攜帶在HTTP頭中,如果cookie保存過多會帶來性能問題
• storage僅在客戶端保存,不參與和服務器的通信 - 從易用性方面來說
• cookie原生接口不友好
• storage原生接口友好,也可自行封裝
五、CDN
六、問題
- 請詳細介紹一下TCP三次握手機制,爲什麼要三次握手?
1.1 爲什麼要有握手?
1.2 爲什麼是三次?
可靠性、需要同步序列號,所以需要握手 - 簡單介紹下HTTP協議中緩存的處理流程?
2.1 緩存的應用流程是什麼?
2.2 與緩存相關的HTTP頭部有哪些? - 在地址欄鍵入URL後,網絡世界發生麼什麼?
- 使用HTTP長連接有哪些優點?
- CLOSE_WAIT狀態產生的原因?
- 介紹下多播是怎樣實現的?
- 服務器的最大併發連接數是多少?
- TCP和UDP協議該如何選擇?
- TLS/SSL協議是如何保障信息安全的?
- HTTP2協議有哪些優點?