這個問題實在是 老生常談,甚至是面試必考題之一,
我這裡記錄一下我學習的結果,僅供自己學習
首先要了解的是,乙個瀏覽器 是有好多程序的,比如瀏覽器程序、渲染程序、gpu程序、網路程序、外掛程式程序
瀏覽器程序 是 管理瀏覽器本身的,而渲染程序 基本上是乙個標籤頁乙個,那麼為什麼要說基本上呢?可以看 4.7 的內容
gpu程序是 在 渲染程序的基礎上,對 展現的影象進行進一步處理的
網路程序 是用來和 網路通訊的,而在 chrome 中,乙個標籤頁同一時間 只會 對同乙個 網域名稱維持 6個tcp鏈結,多餘的在這六個連線結束之前只能掛起。所以當 請求被放到了 三個網域名稱下的話,同時最多會有 18個連線
外掛程式程序是用來專門執行外掛程式的
因為任何 輸入都是不可信的,所以 渲染程序、外掛程式程序其實都是被放在了乙個沙箱中,禁止 訪問系統的 私密檔案以及 操作
你首先輸入之後,會對 你的輸入內容進行檢查,然後根據檢查的結果,去決定是 使用搜尋引擎搜尋,還是當作乙個url 資源
所以 當瀏覽器認為是乙個 url 資源之後,
瀏覽器程序會給 當前的url 加上對應的協議,如 http,cookie,請求頭,當前的 ip,當前服務的埠號 等等資訊
瀏覽器程序將 完整的 url 資訊 推給 網路程序
網路程序 對 該資訊 進行命中,如果有快取,則從快取中讀取,沒有的話,繼續
接下來就會進行 dns 服務的解析,這個是通過 udp 的 (瀏覽器會快取 這個解析的結果,所以第二次開啟同乙個網頁的時候,會發現快一點的原因,這個佔了一部分)
獲取 對應服務的 ip 之後,這個時候才進行 tcp 的三次握手
握手成功 發出 http 請求 (http1和 http2 是基於tcp 的)
進行資料報資訊的傳輸,在這個過程中,tcp 會校驗每個包 是否都 收到,沒有的話進行重發,並且 給每個包 打上序號標籤,保證資訊的完整,客戶端根據資料報的序號標籤對資料進行整理排序 (所以說 為什麼 http3 出現的原因就在這裡了,實在是效率太低。硬生生將 資料的傳輸量 增加了一倍)
資訊傳輸完之後會第一時間關閉tcp嗎?還真不一定
如果你的請求中帶著 keep-alive 的話,接下來的請求會 復用這個tcp連線,省去了 三次握手的過程
然後根據之前 包裝的 服務埠號 等資訊 定位到 對應的應用中
首先,會檢查 響應頭是什麼,然後會檢查 content-type
如果是 301 或者 302 ,那麼 重新進行第二大點 的內容
如果是 304 ,也就是說 伺服器告訴 瀏覽器 資料沒有過期,繼續從快取拿
還有其他的,我也不多說(其實我也一知半解)
接著是 前端 都喜歡的 200 了,你以為 200 就結束了?
咱們進入 text/html 中
渲染程序 又會分為好幾個 執行緒,比如常說的 js 執行緒
這個時候 會給 前端開發者乙個最後掙扎的機會:beforeunload,比如還有東西沒有儲存,是否離開之類的。如果選擇 否,則 不進行接下來的操作
如果使用者選了確定,開始解析,則會替換之前的頁面 (所以直到這一步之前,之前的頁面都是保留著的!!)
瀏覽器並不能直接識別 html 和 css,所以需要解析 這一部分,生成兩棵樹
具體樹的結構可以在 控制台 輸出 document 獲得 dom 樹,以及 document.stylesheets 獲得 css 的樹
在css樹中,其實瀏覽器 是 不能直接使用類似於 color: red 這樣的屬性的,會轉化為 color:rgb(255, 0,0),也不能識別 rem,會轉化為 對應的 px,等等
接下來的解析過程不多說,其他的資料有很多,但是要注意的是,渲染樹中其實 不包含 那些不可見的東西,比如 display:none
需要注意的是,如果你是從乙個頁面中開啟的另乙個頁面,瀏覽器 會 判斷當前 url 中的 網域名稱是否是和之前的是同乙個,是的話,則共用 上乙個頁面的渲染程序 (所以會出現一掛掛好幾個 的現象)
全部資料都處理好了之後,會將 渲染的樹 推到瀏覽器本身
然後 瀏覽器會將這些 渲染的指令 進行 光柵化 去渲染,部分交給 gpu 程序進行渲染
而在執行過程當中,如果js 中有 generator ,就又會生成 單獨的協程來進行 控制權的移交
在瀏覽器中輸入URL後會發生什麼
url 全名叫統一資源定位符,uniform resource locator,俗稱 字面上來理解,它就是用來定位資源的。相當於圖書上面的標籤,有了這些標籤,管理員可以很快的找到相應的圖書。乙個完整的url包括以下資訊 協議,ip位址,路徑,埠號 其實大概分為十步,分別是 第一步 進行網域名稱解析 ...
瀏覽器輸入url會發生什麼
第一步 瀏覽器輸入網域名稱 例如輸入 www.csdn.ne 瀏覽器會把輸入的網域名稱解析成對應的ip,其過程如下 3.查詢路由器快取 如果1,2步都查詢無果,則需要借助網路,路由器一般都有自己的dns快取,將前面的請求發給路由器,查詢isp 服務商快取 dns的伺服器,如果查詢到ip則直接返回,沒...
當在瀏覽器位址列裡輸入URL後會發生什麼事情
其實這個很多大神已經說的很多了。但是為了自己更好的理解,在自己所接觸的層面上,重新對自己講解一下。當然,這是站在乙個前端開發者的角度上來看問題的。輸入url 瀏覽器從url中解析出伺服器的網域名稱 dns伺服器解析url,查詢ip。構建http請求包 http頭,http體 傳輸層傳送tcp連線 3...