對 Web 請求過程的理解

當我們從瀏覽器輸入某個域名(如:http://www.baidu.com ),到服務器返回結果給瀏覽器為止捆蜀,這個過程究竟發(fā)生了什么当宴,又涉及到了哪些技術埠偿。本文談談自己對這一過程的理解。

1. B/S 網(wǎng)絡總體結構

目前 B/S 網(wǎng)絡的總體架構大概如下圖所示:

圖 1. B/S 網(wǎng)絡架構圖

當一個用戶在瀏覽器輸入 http://www.baidu.com 這個 URL 時要门,首先瀏覽器會請求 DNS 把這個域名解析成對應的 IP 地址 虏肾,然后根據(jù)這個 IP 地址找到對應的服務器廓啊,向目標服務器發(fā)起一個 get 請求,由這個目標服務器決定返回什么數(shù)據(jù)資源給訪問的用戶封豪。在這個過程中崖瞭,服務器端還有很多復雜的業(yè)務邏輯:服務器可能不止一臺,到底有哪臺服務器來處理這個請求撑毛,這需要一個負載均衡設備來平均分配所有的用戶請求书聚;還有請求的數(shù)據(jù)可能存在分布式緩存里,也可能存在靜態(tài)文件里藻雌,還有可能存在數(shù)據(jù)庫雌续;當數(shù)據(jù)返回給瀏覽器時,瀏覽器發(fā)現(xiàn)含有一些靜態(tài)資源時胯杭,瀏覽器又會發(fā)起另外的 HTTP 請求驯杜,而這些請求很可能會在 CDN 上,CDN 服務器又會處理這些請求做个。這個過程中的每一個細節(jié)都會決定這個請求是否成功鸽心。

2. 如何發(fā)起一個 HTTP 請求

發(fā)起一個 HTTP 請求和建立一個 Socket 連接的區(qū)別不大,只不過 outputStream.write 寫的二進制數(shù)據(jù)格式要符合 HTTP居暖。瀏覽器在建立 Socket 連接之前顽频,必須根據(jù)地址欄輸入的 URL 的域名 DNS 解析出 IP 地址,再根據(jù)這個 IP 地址和默認的80端口遠程服務器建立 Socket 連接太闺,然后瀏覽器根據(jù)這個 URL 組裝成一個 get 類型的 HTTP 請求頭糯景,通過 outputStream.write 發(fā)送到目標服務器,服務器等待 inputStream.read 返回數(shù)據(jù)省骂,最后斷開這個連接蟀淮。

3. 如何解析 HTTP

這里只介紹下常用的 HTTP 請求頭、響應頭钞澳、狀態(tài)碼以及緩存機制怠惶。

請求頭 說明
Accept-Charset 用于指定客戶端接受的字符集
Accept-Encoding 用于指定可接受的內(nèi)容編碼,如 Accept-Encoding:gzip.deflate
Accept-Language 用于指定一種自然語言轧粟,如 Accept-Language:zh-cn
Host 用于指定被請求資源的 Internet 主機和端口號策治,如 Host:www.baidu.com
User-Agent 客戶端將它的操作系統(tǒng)、瀏覽器和其他屬性告訴服務器
Connection 當前連接是否保持逃延,如:Connection:Keep-Alive
響應頭 說明
Server 使用的服務器名稱览妖,如 Server:Apache/1.3.6(Unix)
Content-Type 用來指明發(fā)送給接受者的實體正文的媒體類型,如 Content-Type:text/html;charset=GBK
Content-Language 描述了資源所用的自然語言揽祥,與 Accept-Language 對應
Content-Encoding 與請求報頭 Accept-Encoding 對應讽膏,告訴瀏覽器服務端采用的是什么壓縮編碼
Content-Length 指明實體正文的長度,用以志杰方式存儲的十進制數(shù)字來表示
Keep-Alive 保持連接的時間拄丰,如:Keep-Alive: timeout=5, max=120
狀態(tài)碼 說明
200 客戶端請求成功
302 臨時跳轉府树,跳轉的地址通過 Location 指定
400 客戶端請求有語法錯誤俐末,不能被服務器識別
403 服務器收到請求,但是拒絕提供服務
404 請求的資源不存在
500 服務器發(fā)生不可預期的錯誤
緩存設置 說明
Cache-Control 請求字段優(yōu)先級較高奄侠,使用如 Cache-Control: no-cache
Pragma 和 Cache-Control 作用類似卓箫,最常用的是 Pragma: no-cache
Expires Expires 后面跟著一個日期和時間,超過這個時間緩存的內(nèi)容將失效
Last-Modified 服務器上的資源最后修改時間
Etag 服務端給每個頁面分配一個唯一的編號垄潮,通過編號來區(qū)分當前頁面是否是最新的

4. DNS 域名解析的過程

DNS 域名解析的大致過程如下圖所示:

圖 2. DNS 域名解析

1. 瀏覽器會檢查緩存中是否有該域名對應的 IP 地址解析結果烹卒,如果緩存中有,這個解析過程就將結束弯洗。
  2. 如果用戶的瀏覽器緩存中沒有旅急,瀏覽器會查找操作系統(tǒng)緩存中是否有這個域名對應的 DNS 解析結果。
  3. 如果用戶操作系統(tǒng)緩存中沒有牡整,操作系統(tǒng)會把這個域名發(fā)送給 LDNS藐吮,也就是本地區(qū)的域名服務器。
  4. 如果 LDNS 仍然沒有命中逃贝,就直接到 Root Server 域名服務器請求解析谣辞。
  5. 根域名服務器返回給本地域名服務器一個所查詢域的主域名服務器(gTLD Server)地址。
  6. 本地域名服務器(LDNS)再向上一步返回的 gTLD 服務器發(fā)送請求沐扳。
  7. 接受請求的 gTLD 服務器查找并返回此域名對應的 Name Server 域名服務器地址泥从,這個 Name Server 通常就是你注冊的域名服務器。
  8. Name Server 域名服務器會查詢存儲的域名和 IP 的映射關系表迫皱,在正常情況下都根據(jù)域名得到目標 IP 記錄歉闰,連同一個 TTL 指返回給 DNS Server 域名服務器。
  9. 返回該域名對應的 IP 和 TTL 值卓起,LDNS 會緩存這個域名和 IP 的對應關系,緩存的時間由 TTL 值控制凹炸。
  10. 把解析的結果返回給用戶戏阅,用戶根據(jù) TTL 值緩存在本地系統(tǒng)緩存中,域名解析過程到此結束啤它。

5. 幾種域名解析方式

  • A 記錄:A 代表的是 Address奕筐,用來指定域名對應的 IP 地址。
  • MX 記錄:表示的是 Mail Exchange变骡,就是可以將某個域名下的郵件服務器指向自己的 Mail Server离赫。
  • CNAME 記錄:全稱是 Canonical Name(別名解析),就是可以為一個域名設置一個或者多個別名塌碌。
  • NS 記錄:為某個域名指定 DNS 解析服務器渊胸。
  • TXT 記錄:為某個主機名或域名設置說明。

6. 何謂 CDN

CDN 也就是內(nèi)容分布網(wǎng)絡(Content Delivery Network),目的就是使用戶可以就近取得所需的內(nèi)容台妆,提高用戶訪問網(wǎng)絡的響應速度翎猛。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胖翰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子切厘,更是在濱河造成了極大的恐慌萨咳,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫稿,死亡現(xiàn)場離奇詭異培他,居然都是意外死亡,警方通過查閱死者的電腦和手機遗座,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門舀凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人员萍,你說我怎么就攤上這事腾降。” “怎么了碎绎?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵螃壤,是天一觀的道長。 經(jīng)常有香客問我筋帖,道長奸晴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任日麸,我火速辦了婚禮寄啼,結果婚禮上,老公的妹妹穿的比我還像新娘代箭。我一直安慰自己墩划,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布嗡综。 她就那樣靜靜地躺著乙帮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪极景。 梳的紋絲不亂的頭發(fā)上察净,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音盼樟,去河邊找鬼氢卡。 笑死,一個胖子當著我的面吹牛晨缴,可吹牛的內(nèi)容都是我干的译秦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诀浪!你這毒婦竟也來了棋返?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤雷猪,失蹤者是張志新(化名)和其女友劉穎睛竣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求摇,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡射沟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了与境。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片验夯。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖摔刁,靈堂內(nèi)的尸體忽然破棺而出挥转,到底是詐尸還是另有隱情,我是刑警寧澤共屈,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布绑谣,位于F島的核電站,受9級特大地震影響拗引,放射性物質發(fā)生泄漏借宵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一矾削、第九天 我趴在偏房一處隱蔽的房頂上張望壤玫。 院中可真熱鬧,春花似錦哼凯、人聲如沸欲间。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽括改。三九已至,卻和暖如春家坎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吝梅。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工虱疏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苏携。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓做瞪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子装蓬,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 最近著拭,終于要把《WEB請求處理系列》提上日程了,一直答應小伙伴們給分享一套完整的WEB請求處理流程:從瀏覽器牍帚、Ng...
    七寸知架構閱讀 31,430評論 27 253
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理儡遮,服務發(fā)現(xiàn),斷路器暗赶,智...
    卡卡羅2017閱讀 134,707評論 18 139
  • 1. 概述 在網(wǎng)絡環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應服務器獲取相應的...
    ghbsunny閱讀 2,901評論 0 7
  • 此外我們外包大師平臺還有: 電商解決方案 視頻直播解決方案 視頻動畫拍攝服務包(為陰陽師做過動畫特效的優(yōu)質團隊) ...
    ecba96ada0a7閱讀 251評論 0 0
  • 穿過漫長的旅途 我?guī)е簧矸αΦ钠v 在天空最低與大地最高的安慰中 看著一縷細細的陽光 刺破厚厚的云層 照耀著我 ...
    葛卡閱讀 231評論 2 2