輸入URL后
- 查詢緩存
- DNS服務器
- TCP三次握手
- HTTP協議包
- 瀏覽器處理HTML文檔
- TCP 和 UDP 的區別
- 寫在最后
很多前端伙伴問題有沒有體系的面試題?
今天為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網
各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有,趕快來裝備自己吧!助你面試穩操勝券,solo全場面試官
查詢緩存
其實從填寫上url按下回車后,我們就進入了第一步就是 DNS 解析過程,首先需要找到這個 url 域名的服務器 ip,為了尋找這個 ip,瀏覽器首先會尋找緩存,查看緩存中是否有記錄緩存的查找記錄為:瀏覽器緩存=》系統緩存=》路由 器緩存
緩存中沒有則查找系統的 hosts 文件中是否有記錄,
DNS服務器
如果沒有緩存則查詢 DNS 服務器,得到服務器的 ip 地址后,瀏覽器根據這個 ip 以及相應的端口號發送連接請求;當然如果DNS服務器中沒有解析成功,他會向上一步獲得的頂級DNS服務器發送解析請求。
TCP三次握手
客戶端和服務端都需要直到各自可收發,因此需要三次握手。
從圖片可以得到三次握手可以簡化為:
1、瀏覽器發送連接請求;
2、服務器允許連接后并發送ACK報文給瀏覽器;
2、瀏覽器接受ACK后并向后端發送一個ACK,TCP連接建立成功
HTTP協議包
構造一個 http 請求,這個請求報文會包括這次請求的信息,主要是請求方法,請求說明和請求附帶的數據,并將這個 http 請求封裝在一個 tcp 包中;這個 tcp 包也就是會依次經過傳輸層,網絡層, 數據鏈路層,物理層到達服務器,服務器解析這個請求來作出響應;返回相應的 html 給瀏覽器;
瀏覽器處理HTML文檔
因為 html 是一個樹形結構,瀏覽器根據這個 html 來構建 DOM 樹,在 dom 樹的構建過程中如果遇到 JS 腳本和外部 JS 連接,則會停止構建 DOM 樹來執行和下載相應的代碼,這會造成阻塞,這就是為什么推薦 JS 代碼應該放在 html 代碼的后面
;
渲染樹
之后根據外部樣式,內部樣式,內聯樣式構建一個 CSS 對象模型樹 CSSOM 樹,構建完成后和 DOM 樹合并為渲染樹,在排除非視覺節點,比如 script,meta 標簽和排除 display 為 none 的節點,之后進行布局,布局主要是確定各個元素的位置和尺寸,之后是渲染頁面,因為 html 文件中會含有圖片,視頻,音頻等資源,在解析 DOM 的過 程中,遇到這些都會進行并行下載,瀏覽器對每個域的并行下載數量有一定的限制,一 般是 4-6 個,當然在這些所有的請求中我們還需要關注的就是緩存,緩存一般通過 Cache-Control、Last-Modify、Expires 等首部字段控制。
Cache-Control 和 Expires 的區別
在于 Cache-Control 使用相對時間,Expires 使用的是基于服務器 端的絕對時間,因為存 在時差問題,一般采用 Cache-Control,在請求這些有設置了緩存的數據時,會先 查看 是否過期,如果沒有過期則直接使用本地緩存,過期則請求并在服務器校驗文件是否修 改,如果上一次 響應設置了 ETag 值會在這次請求的時候作為 If-None-Match 的值交給 服務器校驗,如果一致,繼續校驗 Last-Modified,沒有設置 ETag 則直接驗證 Last-Modified,再決定是否返回 304
到這里就結束了么?其實按照標題所說的到渲染頁面我們確實到此就說明完了,但是嚴格意義上其實我們后面還會有TCP的四次揮手斷開連接,這個我們就放到后面單獨出一篇為大家介紹吧!
TCP 和 UDP 的區別
1、TCP 是面向連接的,udp 是無連接的即發送數據前不需要先建立鏈接。
2、TCP 提供可靠的服務。也就是說,通過 TCP 連接傳送的數據,無差錯,不丟失, 不重復,且按序到達;UDP 盡最大努力交付,即不保證可靠交付。 并且因為 tcp 可靠, 面向連接,不會丟失數據因此適合大數據量的交換。
3、TCP 是面向字節流,UDP 面向報文,并且網絡出現擁塞不會使得發送速率降低(因 此會出現丟包,對實時的應用比如 IP 電話和視頻會議等)。
4、TCP 只能是 1 對 1 的,UDP 支持 1 對 1,1 對多。
5、TCP 的首部較大為 20 字節,而 UDP 只有 8 字節。
6、TCP 是面向連接的可靠性傳輸,而 UDP 是不可靠的。
很多前端伙伴問題有沒有體系的面試題?
今天為大家推薦一款刷題神奇哦 點擊鏈接訪問牛客網
各大互聯網大廠面試真題。從基礎到入階乃至原理刨析類面試題 應有盡有,趕快來裝備自己吧!助你面試穩操勝券,solo全場面試官
寫在最后
? 改變能改變的,接受不能改變的!\textcolor{pink}{ 改變能改變的,接受不能改變的!}改變能改變的,接受不能改變的!
👍 點贊,你的認可是我創作的動力!\textcolor{green}{點贊,你的認可是我創作的動力!}點贊,你的認可是我創作的動力!
?? 收藏,你的青睞是我努力的方向!\textcolor{green}{收藏,你的青睞是我努力的方向!}收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進步的財富!\textcolor{green}{評論,你的意見是我進步的財富!}評論,你的意見是我進步的財富!
本期圖書推薦
數學知識點經過系統梳理,能讓讀者快速入門并掌握實際應用。全書分為兩部分,第一部分從機器學習數學基礎的幾大體系入手,系統講解機器學習的相關數學知識,同時穿插了19個基于Python編程的“小試牛刀”實例,以及20個“專家點撥”的知識;第二部分安排了8個大型的基于Python編程的機器學習應用案例,包括數學建模和工業應用方面的典型案例。
本書是一本系統介紹機器學習所涉及的數學知識和相關Python編程的實例工具書,同時還介紹了非常經典的綜合案例,除了編寫機器學習的代碼,還編寫了深度學習的代碼。本書一共分為兩部分。
第一部分為數學基礎知識部分,包含 8個章節,介紹了微積分、線性代數、概率統計、信息論、模糊數學、隨機過程、凸優化和圖論的系統知識體系及幾個數學知識點對應的Python編程實例。通過這些實例,讀者能夠了解Scikit-learn、Scikit-fuzzy、Theano、SymPy、NetworkX和CVXPY中相應的庫函數的應用。
第二部分為案例部分,包含4個章節,介紹了微積分、線性代數和概率統計問題的建模方法、求解流程和編程實現,以及工業生產領域的Python實戰,包含了機器學習算法和深度學習PyTorch框架的應用。
在學習本書內容前,建議讀者先掌握基本的Python編程知識和數學基礎,然后將本書通讀一遍,了解本書的大概內容,最后再跟著實例進行操作。
本書既注重數學理論,又偏重編程實踐,實用性強,適用于對編程有一定基礎,對系統的數學知識非常渴望,想從事人工智能、大數據等方向研究的讀者。同時也適合作為廣大職業院校相關專業的教材或參考用書。