BS架構web請求過程詳解

本人從今日起開啟自己的頭條之旅,會對技術相關的內容做一些回顧,將自己的學習內容、複習內容、學習心得整理好分享給大家,有錯誤的地方希望大家可以指出,願與諸君共同進步!!!

開始今天的主題,我自己就是做java web開發的,所以第一篇文章打算先整理瀏覽器向服務端發起請求以及瀏覽器器接收響應後請求靜態資源的過程,有了這樣的一個概念後,後面再陸續整理更細節的內容。

首先說一下B/S架構,所謂B其實就是指瀏覽器,S就是服務端,瀏覽器透過HTTP協議訪問服務端,一方面使用者用著方便,一通百通節約了學習成本;另一方面統一的協議也節省了服務商的開發成本。HTTP協議採用無狀態短連線的通訊方式,一次請求就完成一次資料互動,然後就斷開通訊。基於此特點,為了能滿足使用者的訪問請求以及快速響應使用者請求,現在的B/S架構越來越複雜了,下面就具體說一下。

B/S架構web請求過程詳解

1-1 DNS解析流程

先上一張圖(1-1),咱們先從使用者在瀏覽器輸入一個url點回車說起。

使用者在瀏覽器的搜尋欄輸入“www。test。com”,點選回車。

瀏覽器先從快取看是不是存了域名對應的IP,存了就直接訪問服務端,這個快取受瀏覽器快取大小和快取時間的影響。

瀏覽器沒有快取就去找本機的HOSTS檔案,看是否有配置DNS解析,如果配置了就直接訪問IP對應的服務端。

本機也沒有,那就要去本機所在的區域網了,一般公司都會有自己的DNS伺服器(LDNS),絕大部分的域名解析到這裡都結束了,如果還沒有命中,那就要繼續右邊模組裡的複雜流程了。

LDNS首先去RDNS也就是ROOT SERVER域名伺服器請求解析,RDNS返回gTLD(主域名伺服器,如。com,。cn等)的地址,LDNS再去gTLD獲取NAME SERVER地址,從NAME SERVER獲取最終的IP。

將解析得來的IP返回給使用者,使用者本地快取,並對該服務發起請求,請看下圖。

B/S架構web請求過程詳解

1-2 三次握手

上面透過DNS解析找到IP後,就要透過三次握手建立連線了。首先瀏覽器傳送一個建立連線的請求,SYN=1,SEQ=1234;然後服務端接收到請求後要授予連線,就要傳送一個報文段SYN+ACK報文段(SYN=1,ACK=1234+1,SEQ=4321);最後客戶端收到服務端的報文再次發起確認連線報文 ACK=4321+1,SEQ=1234+1。接下來就可以發請求了。

假設我們請求的是http://www。test。com/test/index。html,請求內容包括html、css、js、jpg等圖片,這時候為了響應能更快速,通常css、jpg、無業務邏輯的js都會放在cdn上,那什麼是cdn呢?cdn就是內容分佈網路,說白了它的作用就是根據網路當時的連線、負載等情況選擇一個最優的節點返回使用者需要的資料,提高響應速度。圖參考1-1,會在DNS解析時CNAME(別名解析)解析到另一個域名,最終指向cdn的負載均衡伺服器,由GTM(全域性負載均衡)選擇一個最優的CDN節點IP返回給使用者,使用者就可以去訪問靜態資源了。

總結一下上面說的內容,使用者在訪問一個地址的時候首先經過dns解析獲取IP,然後透過三次握手與服務端建立連線,當拿到服務端返回的頁面資訊後,如果有靜態資源類的內容,再透過cdn獲取,最終結合html頁面及其業務邏輯渲染在瀏覽器上。

先寫這麼多吧,第一次寫文章,大家能理解嗎?歡迎反饋,沒時間看書又想了解的知識點也可以留言,我學完了總結給大家,希望評論區可以成為大家交流的地方,謝謝!