<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          當(dāng)輸入U(xiǎn)RL、敲下回車、最后瀏覽器頁(yè)面顯示,這里面有什么故事?

          共 2692字,需瀏覽 6分鐘

           ·

          2020-09-06 10:19

          當(dāng)輸入U(xiǎn)RL、敲下回車、最后瀏覽器頁(yè)面顯示,這里面有什么故事?鍵盤(pán)到操作系統(tǒng)、操作系統(tǒng)到瀏覽器、瀏覽器到服務(wù)器、服務(wù)器返回?cái)?shù)據(jù)頁(yè)面渲染……

          鍵盤(pán)到操作系統(tǒng)

          回車鍵按下時(shí),與鍵盤(pán)相關(guān)的電路閉合,通過(guò)消抖操作,鍵盤(pán)的電路系統(tǒng)將回車鍵轉(zhuǎn)化為鍵碼13。按鍵被按下會(huì)觸發(fā)中斷事件,回車鍵的鍵碼被編碼并通過(guò)通用串行總線(USB)傳輸?shù)街袛嗾?qǐng)求線上(IRQ),中斷控制器接收到IRQ上的信號(hào)后,會(huì)映射一個(gè)中斷向量。中斷描述符表將中斷向量映射到對(duì)應(yīng)的處理函數(shù)上(中斷處理器)。

          操作系統(tǒng)到瀏覽器

          操作系統(tǒng)通過(guò)相應(yīng)的API函數(shù)獲取到當(dāng)前的活動(dòng)窗口(該瀏覽器)并獲取到當(dāng)前瀏覽器地址欄句柄,操作系統(tǒng)使用sendMessage函數(shù)將消息添加到地址欄句柄的消息隊(duì)列中,sendMessage函數(shù)參數(shù)將帶有按鍵以及按鍵的信息。然后瀏覽器地址欄句柄的消息處理函數(shù)將被調(diào)用,處理消息隊(duì)列中的消息。

          瀏覽器到服務(wù)器

          處理URL

          關(guān)鍵字or地址:瀏覽器搜先分析地址欄的內(nèi)容是關(guān)鍵字還是URL。若地址欄的為關(guān)鍵字,則使用瀏覽器的搜索引擎搜索該關(guān)鍵字。當(dāng)把文字作為關(guān)鍵字傳遞給搜索引擎時(shí),通常會(huì)在URL后面加上一個(gè)參數(shù),這個(gè)參數(shù)告訴搜索引擎搜索來(lái)自哪個(gè)瀏覽器。

          HSTS列表:?HSTS強(qiáng)制客戶端使用HTTPS與服務(wù)器創(chuàng)建連接。若訪問(wèn)的URL在HSTS列表里,則瀏覽器會(huì)把HTTP協(xié)議變?yōu)镠TTPS。

          編碼:?對(duì)URL進(jìn)行Unicode編碼

          DNS查詢

          瀏覽器處理完URL后,將獲取要訪問(wèn)的URL所在服務(wù)器的地址。這時(shí)需要進(jìn)行DNS查詢。

          DNS查詢過(guò)程:

          1.查詢本地DNS緩存
          2.查看本地host表
          3.查詢DNS服務(wù)器在DNS服務(wù)器上進(jìn)行查詢時(shí),首先查詢本地DNS服務(wù)器。若本地DNS 服務(wù)器上有域名的緩存,則本地DNS服務(wù)器將對(duì)應(yīng)IP發(fā)送給查詢方。若本地DNS服務(wù)器上沒(méi)有域名的緩存,則向根域名服務(wù)器發(fā)起查詢(遞歸)。根域名服務(wù)器收到請(qǐng)求后,會(huì)返回下一級(jí)域名信息的DNS服務(wù)器地址。本地DNS服務(wù)器收到地址后繼續(xù)進(jìn)行查詢(迭代),最后獲取到目標(biāo)域名的IP并發(fā)送給查詢方。

          TCP連接

          此時(shí)獲取到URL中域名的IP地址,通過(guò)協(xié)議可以獲取到端口(HTTP:80、HTTPS:443),下一步該進(jìn)行瀏覽器與服務(wù)器之間的連接。
          瀏覽器使用socket函數(shù)來(lái)進(jìn)行TCP連接,初始化socket時(shí)參數(shù)為 AF_INET和SOCK_STREAM。

          TCP建立連接過(guò)程(三次握手):

          1.客戶端發(fā)送一個(gè)TCP包。設(shè)置SYN=1(請(qǐng)求建立連接)、Seq=X(隨機(jī)產(chǎn)生的序列號(hào))
          2.服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。SYN=1、ACK=1、ACK number = X+1、Seq = Y(隨機(jī)產(chǎn)生)
          3.客戶端再次發(fā)送確認(rèn)包(ACK) 。SYN=0、ACK=1、ACK number= Y+1、Seq = X+1

          TCP斷開(kāi)連接過(guò)程(四次揮手):

          1.客戶機(jī)給服務(wù)器一個(gè)FIN為1的TCP報(bào)文
          2.服務(wù)器返回給客戶端一個(gè)確認(rèn)ACK報(bào)文
          3.服務(wù)器給客戶端發(fā)送一個(gè)FIN報(bào)文
          4.客戶機(jī)回復(fù)ACK報(bào)文

          服務(wù)器動(dòng)作

          從瀏覽器發(fā)起請(qǐng)求到請(qǐng)求到頁(yè)面數(shù)據(jù)的過(guò)程中,可能會(huì)經(jīng)過(guò)負(fù)載均衡等中間部分

          負(fù)載均衡

          方式說(shuō)明特點(diǎn)
          HTTP重定向瀏覽器向web服務(wù)器請(qǐng)求某個(gè)URL后,web服務(wù)器可以通過(guò)http響應(yīng)頭信息中的Location標(biāo)記來(lái)返回一個(gè)新的URL主站點(diǎn)服務(wù)器的吞吐率平均分配到了被轉(zhuǎn)移的服務(wù)器;重定向的服務(wù)器工作量不同,實(shí)際的負(fù)載量不可估計(jì)
          DNS負(fù)載均衡在DNS服務(wù)器中配置多個(gè)A記錄,將這些A記錄對(duì)應(yīng)的服務(wù)器構(gòu)造成集群,,例如CDN可以根據(jù)用戶IP選擇最近的服務(wù)器,無(wú)法記錄HTTP請(qǐng)求上下文
          反向代理轉(zhuǎn)發(fā)http請(qǐng)求(應(yīng)用層),常用nginx所有HTTP請(qǐng)求都必須經(jīng)過(guò)代理,可以為不同的實(shí)際服務(wù)器設(shè)置不同的權(quán)重,要求并發(fā)處理能力要求高,可以可以監(jiān)控后端服務(wù)器
          IP負(fù)載均衡網(wǎng)絡(luò)層通過(guò)修改請(qǐng)求目標(biāo)地址進(jìn)行負(fù)載均衡(網(wǎng)絡(luò)層)吞吐率高,要求網(wǎng)絡(luò)帶寬大

          請(qǐng)求處理

          1.服務(wù)器收到請(qǐng)求后將請(qǐng)求解析為:請(qǐng)求方法、域名、請(qǐng)求路徑
          2.服務(wù)器找到該域名對(duì)應(yīng)的虛擬主機(jī),并驗(yàn)證該虛擬主機(jī)是否可以使用該請(qǐng)求方法
          3.服務(wù)器獲取請(qǐng)求路徑對(duì)應(yīng)的內(nèi)容,并根據(jù)內(nèi)容使用指定的程序來(lái)處理(e.g.使用不同的程序解析PHP、JSP等文件),將輸出的結(jié)果發(fā)送給瀏覽器

          PLUS - 請(qǐng)求方法

          方法描述
          GET請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。
          POST向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)
          PUT從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容
          HEAD與get類似,不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭
          DELETE請(qǐng)求服務(wù)器刪除指定的頁(yè)面
          OPTIONS返回服務(wù)器針對(duì)特定資源所支持的HTTP請(qǐng)求方法
          TRACE回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷
          CONNECTHTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器

          瀏覽器頁(yè)面渲染

          瀏覽器收到服務(wù)器返回的頁(yè)面數(shù)據(jù)后,開(kāi)始對(duì)頁(yè)面進(jìn)行渲染

          瀏覽器進(jìn)程與線程

          瀏覽器是多進(jìn)程的,用于頁(yè)面顯示的有Browser進(jìn)程、第三方插件進(jìn)程、GPU進(jìn)程(3D繪制等)、瀏覽器渲染進(jìn)程(瀏覽器內(nèi)核,每個(gè)Tab頁(yè)面都有一個(gè)渲染進(jìn)程)。

          瀏覽器渲染進(jìn)程包含的線程:

          GUI渲染線程
          JS引擎線程
          事件觸發(fā)線程
          定時(shí)器觸發(fā)器線程
          異步http請(qǐng)求線程
          注意:?JavaScript可以操作DOM,如果修改元素的時(shí)候同時(shí)渲染頁(yè)面,就可能出現(xiàn)不可預(yù)料的結(jié)果,所以GUI渲染線程與JS引擎線程是互斥的

          瀏覽器渲染頁(yè)面過(guò)程

          1.解析HTML建立dom樹(shù)
          2.解析css構(gòu)建render樹(shù)(將CSS代碼解析成樹(shù)形的數(shù)據(jù)結(jié)構(gòu),然后結(jié)合DOM合并成render樹(shù))
          3.布局render樹(shù)(確定每個(gè)節(jié)點(diǎn)在屏幕上的位置)
          4.繪制render樹(shù)(遍歷render樹(shù),并使用UI后端層繪制每個(gè)節(jié)點(diǎn))

          CSS加載是否會(huì)阻塞dom樹(shù)渲染?

          css加載不會(huì)阻塞DOM樹(shù)解析
          css加載會(huì)阻塞render樹(shù)渲染

          回流和重繪

          回流:瀏覽器重新渲染部分或全部文檔的過(guò)程
          重繪:元素改變的樣式不影響元素位置時(shí),瀏覽器將新樣式賦予給元素并重新繪制它的過(guò)程

          如果你覺(jué)得文章不錯(cuò),歡迎點(diǎn)贊分享到朋友圈



          推薦閱讀

          架構(gòu)師離職后,成為自由開(kāi)發(fā)者的第 100 天




          點(diǎn)擊“閱讀原文”,領(lǐng)取 2020 年最新免費(fèi)技術(shù)資料大全

          ↓↓↓?
          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产成年人黄色大香蕉 | 北条麻妃中文字幕黄色片子 | 视频二区中文字幕 | 成人精品在线观看 | 国产黄视频网站 |