WEB請求過程

2021-08-01 23:54:26 字數 3058 閱讀 7332

一、乙個例子

當使用者在瀏覽器中輸入www.***.com這個url時,

首先,dns會把這個網域名稱解析成ip位址,

然後根據這個ip找到對應的伺服器,並發起乙個get請求,

對於伺服器端而言,

可能會有負載均衡裝置來平均分配使用者請求,

而請求的資料可能在分布式快取裡,靜態檔案中,或是資料庫中,

當資料返回給瀏覽器時,瀏覽器解析資料發現還有些靜態檔案(css、js、...),又會發起另外的http請求,而這些請求,很可能落在cdn上。

例子.png

不過網路架構如何變化,始終有一些固定不變的原則需要遵守:

二、發起http請求

發起乙個http請求和建立乙個socket連線區別不大,只不過outputstream.write寫的二進位制位元組資料格式要符合http。瀏覽器在建立socket連線之前,必須根據位址列輸入的url的網域名稱dns解析出ip位址,在根據這個ip位址和預設的80埠與遠端伺服器建立socket連線,然後瀏覽器根據這個url組裝成乙個get型別的http請求頭,通過outputstream.write傳送到目標伺服器,伺服器等待inputstream.read返回資料,最後斷開這個連線。

模擬瀏覽器傳送http請求:

三、http解析

要理解http,最重要的就是熟悉http中的http header,http header控制著網際網路上成千上萬的使用者的資料的傳輸。最關鍵的是,它控制著使用者瀏覽器的渲染行為和伺服器的執行邏輯。

瀏覽器快取機制:

在我們瀏覽乙個頁面發現有異常時,通常考慮是不是瀏覽器做了快取,一般做法ctrl+f5(mac chrome為command+shift+r)重新請求一次這個頁面,該頁面肯定是最新的頁面。

原因:瀏覽器直接向目標url傳送請求,不用瀏覽器快取。

即使應用伺服器前端部署快取伺服器,也能看到最新的資料,因為通過http請求頭來控制,具體如下。

請求頭新增兩個請求項:

http head 欄位可選值

expires

expires通常的使用格式是expires:sat, 25 feb 2012 12:22:17 gmt, 後面跟著乙個日期和時間,超過這個時間後,快取的內容將失效,也就是瀏覽器在發請求之前接著頁面的這個字段,看頁面是否過期,過期就重新向伺服器傳送請求。

last-modified/etag

last-modified欄位用於表示乙個伺服器上的資源的最後修改時間,一般服務端在響應頭中返回該欄位,瀏覽器再次請求shi時在請求頭中增加乙個if-modified-since欄位,詢問當前快取頁面是否最新,若是,返回304狀態碼,告訴瀏覽器是最新,伺服器也不會傳輸新的資料。

etag與上述字段相似,讓服務端給每個頁面分配乙個唯一的編號,通過編號來區分這個頁面是否最新。

四、dns網域名稱解析

解析過程

dns網域名稱解析

當使用者在瀏覽器中輸入網域名稱按下回車:

(1)瀏覽器先查快取,若快取中有網域名稱對應ip位址,則解析結束。(存活時間ttl)

(2)若瀏覽器快取中沒有,瀏覽器會查詢作業系統中快取快取是否有這個網域名稱對應的dns解析結果。(hosts 檔案)

(3)如果在本機中仍然無法完成網域名稱的解析,則會真正請求網域名稱伺服器來解析這個網域名稱了。作業系統會把網域名稱傳送給設定的ldns(cat /etc/resolv.conf)。

(4)若ldns沒有命中,就直接到root server網域名稱伺服器請求解析。

(5)根網域名稱伺服器返回本地網域名稱伺服器乙個所查詢域的主網域名稱伺服器(gtld server)位址。gtld是國際頂級網域名稱伺服器,如.com、.cn、.org等,全球只有13臺左右。

(6)本地網域名稱伺服器(local dns server)再向上一步返回的gtld伺服器傳送請求。

(7)接受請求的gtld伺服器查詢並返回此網域名稱對應的name server網域名稱伺服器,這個name server通常就是你註冊的網域名稱伺服器,例如你在某個網域名稱服務提供商申請的網域名稱,那麼這個網域名稱解析任務就有這個網域名稱提供商的伺服器來完成。

(8)name server返回ip記錄和ttl(快取時間)。

(9)ldns快取該記錄,快取時間有ttl控制。

(10)解析結果返回給使用者,使用者根據ttl值快取在本地系統快取中,網域名稱解析過程結束。

在實際的dns解析過程中,可能不止這10步,如name server可能有多級,或者有乙個gtm來負載均衡控制等。

可通過nslookup、dig 命令來跟蹤網域名稱解析過程。

五、cdn工作機制

cdn即內容分發網路(content delivery network),目的是通過現有的internet中增加一層新的網路架構,將**的內容發布到最接近使用者的網路邊緣,使使用者可以就近取得所需內容,提高使用者訪問**響應速度。

cdn = 映象(mirror)+ 快取(cache)+ 整體負載均衡(gslb)

目前cdn都已快取**中靜態資料為主。

cdn 架構:

cdn架構

cdn動態加速

cdn的動態加速技術也是當前比較流行的一種優化技術,是在cdn的dns解析中通過動態的鏈路探測來尋找回源最好的一條路徑,然後通過dns的排程將所有請求排程到選定的這條路徑上回源,從而加速使用者的訪問。

cdn動態加速

Web請求過程

當使用者在瀏覽器中輸入乙個url 如www.baidu.com 進行網頁瀏覽時,將會發生一系列的操作。大致流程如下 1 網域名稱解析 當使用者輸入網域名稱後,需要將網域名稱轉換成正確的ip位址,才能夠訪問web伺服器。首先會查詢本地網域名稱hosts檔案,若存在對應網域名稱的ip位址,就直接使用。若...

web請求過程

b s兩方面好處 客戶端使用統一的瀏覽器 browser 瀏覽器統一性,遮蔽了不同伺服器提供商提供服務的差異性。並且,瀏覽器互動特性使瀏覽器使用方便,且使用者行為的可繼承性非常強。服務端 server 基於統一的http協議。簡化服務提供商開發模式,規範伺服器開發者上午開發模式。http協議採用無狀...

Web請求過程

從http結構到dns解析到cdn架構,了解web請求的具體過程。與傳統的c s架構的長連線互動模式不同,http採用了無狀態的短連線通訊方式。一次請求完成一次資料互動,然後斷開通訊。這樣做的原因是為了可以同時服務更多的使用者,不可能每次乙個使用者訪問一次就一直保持這個長連線。其實發起乙個http鏈...