流程
在地址欄中輸入url
- 瀏覽器是用http還是https訪問服務器呢? 如果沒有明確告知瀏覽器是用哪個協議,針對此種情況,瀏覽器有自己的預案,那就是默認使用http協議,除非小明輸入的是 https://zhihu.com
- 所以輸入的網址被瀏覽器補齊爲 zhihu.com
域名解析
- 瀏覽器在本地host文件中查找,檢查在該文件中是否有相應的域名、IP對應關係,如果有,則向其IP地址發送請求,如果沒有,再去找DNS服務器。
- 由於本地 DNS 服務器沒有緩存不能直接將域名轉換爲 IP 地址,需要採用遞歸或者迭代查詢的方式依次向根域名服務器、頂級域名服務器、權威域名服務器發起查詢請求,直至找到一個或一組 IP 地址,返回給瀏覽器。
- 瀏覽器向本地DNS服務器發送查詢請求報文,本地DNS服務器把查詢報文轉發到根DNS服務器,根DNS服務器注意到其com後綴,於是向本地DNS服務器返回comDNS服務器的IP地址。本地DNS服務器再次向comDNS服務器發送查詢請求,comDNS服務器注意到其www.yuque.com後綴並用負責該域名的權威DNS服務器的IP地址作爲迴應,再往下推導。
TCP連接
- 通過 DNS 解析拿到服務器 IP 地址後,瀏覽器再通過系統調用 Socket 接口與服務器 443 (https)端口進行通信。
- 三次握手:客戶端發送一個帶有SYN標誌的數據包給服務端,服務端收到後,回傳一個帶有SYN/ACK標誌的數據包以示傳達確認信息,最後客戶端再回傳一個帶ACK標誌的數據包,代表握手結束,連接成功。
- 如果客戶端此前未與服務器建立會話,那麼雙方需要進行一次完整的 TLS 四次握手。
- SSL/TLS協議,網站想要實現數據HTTPS加密協議訪問,保障數據的安全,就需要SSL證書,TLS是SSL與HTTPS安全傳輸層協議名稱
- https://www.cnblogs.com/huanxiyun/articles/6554085.html
發送HTTP請求
- 請求結構:報文首部、空行和報文主體。
- 請求行作用補充??
服務器處理請求
- web服務器諸如Apache、Ngnix、IIS等,解析用戶請求,知道了需要調度哪些資源文件,再通過資源文件處理用戶請求和參數,從數據庫查詢信息,最後將結果通過web服務器返回給瀏覽器客戶端。
- 靜態資源和動態資源
- web服務器和應用服務器??
返回響應結果
- 響應報文
- 常見狀態碼
斷開連接????
- 爲了避免服務器與客戶端雙方的資源佔用和損耗,當雙方沒有請求或響應傳遞時,任意一方都可以發起關閉請求
- 四次握手
瀏覽器解析HTML
- 渲染引擎 Blink(基於 Webkit)和 JavaScript 引擎 V8
- 瀏覽器通過解析HTML,生成DOM樹,解析CSS,生成CSS規則樹,然後通過DOM樹和CSS規則樹生成渲染樹。
- 瀏覽器的解析過程並非是串連進行的,比如在解析CSS的同時,可以繼續加載解析HTML。
- 瀏覽器只能解析靜態資源?
頁面佈局與渲染
- replaint和reflow
參考:
https://www.cnblogs.com/xianyulaodi/p/6547807.html
https://blog.csdn.net/u013450405/article/details/79563810
https://zhuanlan.zhihu.com/p/43369093
https://segmentfault.com/a/1190000012092552
https://www.jianshu.com/p/c1dfc6caa520