一、相關衍生面試問題:
瀏覽器輸入美團網站,從回車到瀏覽器展示經歷了哪些過程 ?
http輸入網頁之后的流程?
百度搜索頁面,從點開搜索框,到顯示搜索頁面經歷了什么?
二、探究各個過程:
(以下回答針對問題1回答)
1. DNS 解析
- 瀏覽器首先會檢查本地 DNS 緩存,看是否有美團網站的 IP 地址。如果沒有,則會向本地 DNS 服務器發送請求,查詢美團網站的域名對應的 IP 地址。
- 本地 DNS 服務器可能無法直接找到美團網站的 IP 地址,它會向根域名服務器發送請求,根域名服務器會指引本地 DNS 服務器去查詢 .com 域名的頂級域名服務器。
- 頂級域名服務器會指引本地 DNS 服務器去查詢美團網站的域名服務器。
- 美團網站的域名服務器會最終返回美團網站的 IP 地址給本地 DNS 服務器。
- 本地 DNS 服務器將 IP 地址返回給瀏覽器,并將其緩存起來。
【涉及到的相關知識:
1.DNS緩存:存儲近期瀏覽、連接過的網站服務器的IP用的一個緩存系統。瀏覽器會盡可能利用緩存來提高性能,減少不必要的網絡請求和DNS解析。
2.域名服務器:根域名服務器、頂級域名服務器(org\com\edu)、權限域名服務器、本地域名服務器[迭代查詢(常用) | | 遞歸查詢]。
3.DNS解析:用來把便于人們記憶的主機域名和電子郵件地址映射為計算機易于識別的IP地址。
】
2. 建立 TCP 連接
- 瀏覽器使用獲得的 IP 地址,嘗試與美團網站的服務器建立 TCP 連接。
- 瀏覽器會發送一個 SYN 包(同步請求)到服務器,服務器收到后會回復一個 SYN-ACK 包(同步確認)。
- 瀏覽器收到 SYN-ACK 包后,會發送一個 ACK 包(確認),完成三次握手過程,建立 TCP 連接。
【相關知識點:
1.三次握手的原因:首要原因是為了防止舊的重復連接初始化造成混亂,最主要原因就是防止「歷史連接」初始化了連接。
2.每次建立 TCP 連接時,初始化的序列號都要求不一樣:為了防止歷史報文被下一個相同四元組的連接接收(主要方面);為了安全性,防止黑客偽造的相同序列號的 TCP 報文被對方接收。
3.SYN攻擊屬于DDoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。【最直接的表現就會把 TCP 半連接隊列打滿,這樣當 TCP 半連接隊列滿了,后續再在收到 SYN 報文就會丟棄,導致客戶端無法和服務端建立連接。】
- 半連接隊列,也稱 SYN 隊列;
- 全連接隊列,也稱 accept 隊列;
4.避免辦法:
- 調大 netdev_max_backlog;
- 增大 TCP 半連接隊列;
- 開啟 tcp_syncookies;
- 減少 SYN+ACK 重傳次數
】
3. 發送 HTTP 請求
- 瀏覽器向美團網站的服務器發送一個 HTTP 請求,包含以下信息:
- 請求方法:GET
- 請求 URL:美團網站的首頁地址
- 請求頭:包含一些瀏覽器信息、語言信息、Cookie 信息等。
- 服務器收到請求后,會根據請求信息進行處理。
【相關知識點:
1.post、get、put、delete就是對這個資源進行增、刪、改、查的操作!
2.URI 用字符串標識某一互聯網資源【身份證號】,而 URL 表示資源的地點【居住地址】
3.Cookie為“小型文本文件”,是某些網站為了辨別用戶身份,進行Session跟蹤而儲存在用戶本地終端上的數據(通常經過加密),由用戶客戶端計算機暫時或永久保存的信息
】
4. 服務器處理請求
- 服務器會根據請求 URL,找到對應的頁面文件。
- 服務器會根據頁面文件的內容,生成 HTML 代碼。
- 服務器會根據請求頭中的 Cookie 信息,判斷用戶是否已登錄,并根據用戶狀態,添加一些個性化的內容到 HTML 代碼中。
- 服務器會根據請求頭中的語言信息,選擇合適的語言版本。
【相關知識點:
1.跨站請求偽造(Cross-Site Request Forgery,簡稱CSRF)是指,攻擊者可能利用網頁中的惡意代碼強迫受害者瀏覽器向被攻擊的Web站點發送偽造的請求,篡奪受害者的認證Cookie等身份信息,從而假冒受害者對目標站點執行指定的操作。
2.保護措施主要有:(1 )加入MAC以進行完整性校驗;(2)防止非法用戶非法截獲后的重放,可以讓用戶對相關信息進行數字簽名,加強有效性驗證;(3)對Cookie本身進行隨機密鑰加密,保證Cookie本身的信息安全。
】
5. 服務器返回響應
- 服務器將生成的 HTML 代碼,以及一些其他信息(例如圖片、CSS、JavaScript 文件等),打包成 HTTP 響應,發送回瀏覽器。
- 響應頭包含一些狀態碼、內容類型、緩存信息等。
6. 瀏覽器解析響應
- 瀏覽器收到響應后,會解析響應頭中的狀態碼。
- 如果狀態碼為 200,表示請求成功,瀏覽器會繼續解析響應內容。
- 如果狀態碼為 404,表示頁面未找到,瀏覽器會顯示錯誤頁面。
- 瀏覽器會解析響應內容中的 HTML 代碼,并將其渲染成網頁。
- 瀏覽器會加載響應內容中的圖片、CSS、JavaScript 文件,并將其應用到網頁中。
【相關知識點:
- 1xx(信息性狀態碼):表示接收的請求正在處理。
- 2xx(成功狀態碼):表示請求正常處理完畢。
- 3xx(重定向狀態碼):需要后續操作才能完成這一請求。
- 4xx(客戶端錯誤狀態碼):表示請求包含語法錯誤或無法完成。
- 5xx(服務器錯誤狀態碼):服務器在處理請求的過程中發生了錯誤。
】
7. 網頁展示
- 瀏覽器將渲染好的網頁展示給用戶。
8. 持續交互
- 用戶在網頁上進行操作,例如點擊鏈接、提交表單等,瀏覽器會發送新的 HTTP 請求到服務器,服務器會根據請求進行處理,并返回新的響應,瀏覽器會繼續更新網頁內容。
三、面試回答:
-
用戶在瀏覽器地址欄輸入"meituan.com"并按下回車鍵。
-
瀏覽器首先會查看自己的緩存,看是否之前已經訪問過這個網站并緩存了相關資源。如果緩存中有相關的資源,瀏覽器就可以直接使用緩存中的內容,無需進行其他操作。
-
如果緩存中沒有找到所需的資源,瀏覽器就需要進行DNS解析,查找"meituan.com"對應的IP地址。這個過程中,瀏覽器會先查看本地DNS緩存,如果沒有找到就會向DNS服務器發起查詢請求。
-
獲得IP地址后,瀏覽器會向該IP地址發起HTTP請求,向web服務器請求獲取"meituan.com"網頁的內容。
-
web服務器收到請求后,會處理并生成相應的HTML頁面內容,然后將其返回給瀏覽器。
-
瀏覽器收到HTML頁面內容后,會對其進行解析和渲染,構建出網頁的DOM樹并顯示出來。
-
在渲染網頁的過程中,還可能需要加載額外的資源,如CSS文件、JavaScript文件、圖片等。對于這些資源,瀏覽器也會遵循之前的流程,先檢查緩存,再進行DNS解析和網絡請求。
-
當所有必需的資源都加載完畢后,瀏覽器就能將完整的網頁呈現給用戶。
【下圖為代碼隨想錄推薦回答:】