從輸入一個網(wǎng)址到瀏覽器顯示頁面經(jīng)歷的全過程筆記

原文地址:https://www.toutiao.com/i6794820979836060163/?timestamp=1584062472&app=news_article&group_id=6794820979836060163&req_id=202003130921120100140470790493AC5A

  1. 輸入網(wǎng)址
  2. DNS解析獲取域名對應(yīng)的IP地址
  3. 建立TCP連接
  4. web瀏覽器向web服務(wù)器發(fā)送HTTP請求
  5. 服務(wù)器的永久重定向響應(yīng)
  6. web服務(wù)器做出應(yīng)答
  7. 瀏覽器顯示 HTML
  8. web服務(wù)器關(guān)閉TCP連接

1疤坝、輸入網(wǎng)址

瀏覽器會在用戶輸入url時查找歷史信息對其補全或直接顯示緩存在本地的網(wǎng)頁兆解。

2、DNS解析獲取域名對應(yīng)的IP地址

用戶發(fā)起請求后跑揉,瀏覽器會解析這個url锅睛,將其轉(zhuǎn)換為ip地址。

第一步:查看hosts文件历谍,如果hosts文件里面配置了url和ip的關(guān)系现拒,則直接使用里面的ip地址。hosts文件存儲在操作系統(tǒng)的如下目錄中望侈,打開后可手動配置印蔬。下圖的示例中,左邊是ip地址脱衙,右邊是url侥猬。

Hosts

第二步:瀏覽器向本地DNS服務(wù)器(用網(wǎng)絡(luò)運營商提供例驹,如中國移動等)發(fā)送一個DNS請求。DNS (Domain Name System)是域名系統(tǒng)退唠,用來將域名解析成ip地址鹃锈。

DNS

第三步:本地DNS在收到請求后查詢緩存,如果沒有命中瞧预,還會向根DNS服務(wù)器發(fā)送請求屎债。

第四步:根DNS服務(wù)器不直接存儲解析數(shù)據(jù),而是返回一個域服務(wù)器地址垢油,本地DNS服務(wù)器轉(zhuǎn)而向域服務(wù)器發(fā)送查詢請求盆驹。

第五步:本地DNS服務(wù)器繼續(xù)向域服務(wù)器(例如.com域服務(wù)器)發(fā)出請求,返回的是一個解析服務(wù)器的地址滩愁。

第六步:本地DNS服務(wù)器向域名的解析服務(wù)器發(fā)出請求召娜,獲得域名與ip的映射關(guān)系。在返回數(shù)據(jù)時惊楼,本地DNS會進行緩存。

3秸讹、建立TCP連接

瀏覽器會首先與服務(wù)器依照三次握手和四次揮手建立TCP連接(根據(jù)OSI七層協(xié)議檀咙,低層次的協(xié)議需要率先建立連接,只有建立了TCP連接才能使用HTTP協(xié)議)璃诀。

三次握手和四次揮手:https://www.toutiao.com/i6795125147612217867/?group_id=6795125147612217867?group_id=6795125147612217867?group_id=6795125147612217867

4弧可、瀏覽器向服務(wù)器發(fā)送HTTP請求

一個典型的http request header一般需要包括請求的方法,例如GET或者POST等慷妙,不常用的還有PUT和DELETE潮剪、HEAD蹭秋、OPTION以及TRACE方法,一般的瀏覽器只能發(fā)起GET或者POST請求校套。

HTTP的請求信息主要包含三部分內(nèi)容:

  • 請求方法URI協(xié)議/版本
  • 請求頭(Request Header)
  • 請求正文(Request Body)

URI和URL的區(qū)別:https://blog.csdn.net/qq_32595453/article/details/80563142

一個完整的HTTP請求如下所示:

// 請求行:方法URL議/版本
GET/sample.jsp HTTP/1.1
// 請求頭:存儲瀏覽器語言和連接狀態(tài)等信息
Accept:image/gif.image/jpeg,*/
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

// 請求正文:以空行和請求頭分隔,存儲請求參數(shù)和他們對應(yīng)的值
username=jinqiao&password=1234

以Chrome瀏覽器為例牧抵,按F12打開控制臺笛匙,選擇標簽頁中的Network,然后選擇一個請求犀变。下圖展示的就是一個Http Request Header和他發(fā)送給服務(wù)器的參數(shù)妹孙。

Http Request Header
Http Request Body

5、服務(wù)器的永久重定向響應(yīng)

服務(wù)器給瀏覽器響應(yīng)一個301永久重定向響應(yīng)获枝,這樣瀏覽器就會訪問“http://www.google.com/” 而非“http://google.com/”蠢正。

重定向原因:

  • 網(wǎng)站調(diào)整(如改變網(wǎng)頁目錄結(jié)構(gòu));
  • 網(wǎng)頁被移到一個新地址省店;
  • 網(wǎng)頁擴展名改變(如應(yīng)用需要把.php改成.Html或.shtml)嚣崭。

此時如果不進行重定向的話笨触,用戶會得到一個404報錯信息。之后有鹿,瀏覽器根據(jù)服務(wù)器返回的重定向地址繼續(xù)請求網(wǎng)站信息旭旭。

6、web服務(wù)器做出應(yīng)答

和HTTP請求一樣葱跋,HTTP響應(yīng)信息也主要包含三個部分:

  • 狀態(tài)行
  • 響應(yīng)頭(Response Header)
  • 響應(yīng)正文(Response Body)
// 狀態(tài)行:包括協(xié)議版本持寄、數(shù)字形式的狀態(tài)代碼、及相應(yīng)的狀態(tài)描述娱俺,以空格分隔
HTTP/1.1 200 OK
// 響應(yīng)頭:存儲日期和內(nèi)容長度等信息
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

// 響應(yīng)正文:以空行和響應(yīng)頭分隔稍味,存儲cookie,html荠卷,image模庐,后端返回的請求數(shù)據(jù)等
<html>
<head>
<title>http</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

7、瀏覽器顯示HTML

網(wǎng)頁是根據(jù)服務(wù)器返回的html文件顯示的油宜,顯示過程中需要進行渲染掂碱。以webkit為例,渲染的過程包括:解析html以構(gòu)建dom樹 -> 構(gòu)建render樹 -> 布局render樹 -> 繪制render樹慎冤。

渲染完成后疼燥,瀏覽器會發(fā)送請求獲取嵌入在HTML中的資源(如圖片、音頻蚁堤、視頻醉者、CSS、JS等)披诗,這個過程和上面發(fā)送請求的過程是一樣的撬即。

8、web服務(wù)器關(guān)閉TCP連接

是否關(guān)閉TCP連接可以通過參數(shù)配置(connection:keep-alive)呈队。新版本的協(xié)議也會通過默認持久連接來節(jié)省帶寬剥槐。TCP連接關(guān)閉后,一次瀏覽器顯示頁面的交互就結(jié)束了掂咒。

補充:

上面的內(nèi)容將整個交互中的各部分系統(tǒng)簡單分成了瀏覽器和后端服務(wù)器(這個服務(wù)器會返回html和其他的業(yè)務(wù)請求信息)才沧。然而,越來越多的系統(tǒng)開始采用前后端分離的架構(gòu)绍刮,這時候在交互的細節(jié)上就會稍有不同温圆。

一般來說,分離后的前端服務(wù)和后端服務(wù)是兩個獨立的Java應(yīng)用程序孩革。前端負責接收瀏覽器的請求岁歉,如果是頁面加載,則直接將信息返回給瀏覽器;如果有業(yè)務(wù)邏輯處理要求或數(shù)據(jù)庫訪問要求锅移,前端則會向后端服務(wù)器發(fā)送請求熔掺。

此時,后端服務(wù)器只會收到前端發(fā)來的請求非剃,處理完請求后也會直接將結(jié)果返回給前端置逻,不會和瀏覽器產(chǎn)生直接的交互。

而瀏覽器可以將前端和后端統(tǒng)一看作一個服務(wù)器备绽,不去關(guān)心他們內(nèi)部的交互和實現(xiàn)邏輯∪耄現(xiàn)實場景中,后端服務(wù)器的架構(gòu)一般會更加復雜肺素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恨锚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倍靡,更是在濱河造成了極大的恐慌猴伶,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塌西,死亡現(xiàn)場離奇詭異他挎,居然都是意外死亡,警方通過查閱死者的電腦和手機捡需,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門雇盖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人栖忠,你說我怎么就攤上這事∶辰郑” “怎么了庵寞?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長薛匪。 經(jīng)常有香客問我捐川,道長,這世上最難降的妖魔是什么逸尖? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任古沥,我火速辦了婚禮,結(jié)果婚禮上娇跟,老公的妹妹穿的比我還像新娘岩齿。我一直安慰自己,他們只是感情好苞俘,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布盹沈。 她就那樣靜靜地躺著,像睡著了一般吃谣。 火紅的嫁衣襯著肌膚如雪乞封。 梳的紋絲不亂的頭發(fā)上做裙,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音肃晚,去河邊找鬼锚贱。 笑死,一個胖子當著我的面吹牛关串,可吹牛的內(nèi)容都是我干的拧廊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼悍缠,長吁一口氣:“原來是場噩夢啊……” “哼卦绣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起飞蚓,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤滤港,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后趴拧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溅漾,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年著榴,在試婚紗的時候發(fā)現(xiàn)自己被綠了添履。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡脑又,死狀恐怖暮胧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情问麸,我是刑警寧澤往衷,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站严卖,受9級特大地震影響席舍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮笆,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一来颤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稠肘,春花似錦福铅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春拷沸,著一層夾襖步出監(jiān)牢的瞬間色查,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工撞芍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秧了,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓序无,卻偏偏與公主長得像验毡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帝嗡,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353