網頁請求的完整過程


眾所周知,打開一個網頁的過程中,瀏覽器會因頁面上的css/js/image等靜態資源會多次發起連接請求,所以我們暫且把這個網頁加載過程分成兩部分:

html或者jsp/php/aspx 頁面加載

css/js/image等網頁靜態資源加載(假設使用CDN)(靜態資源:非服務器動態運行生產的文件)

 

步驟:

1.DNS解析:當用戶輸入一個網址並按下回車鍵的時候,瀏覽器得到了一個域名。而在實際通信過程中,我們需要的是一個IP地址。因此我們需要先把域名轉換成相應的IP地址,這個過程稱作DNS解析。根據ip找到ip對應的服務器。

1) 瀏覽器首先搜索瀏覽器自身緩存的DNS記錄。

或許很多人不知道,瀏覽器自身也帶有一層DNS緩存。Chrome 緩存1000條DNS解析結果,緩存時間大概在一分鍾左右。(Chrome瀏覽器通過輸入:chrome://net-internals/#dns 打開DNS緩存頁面)

2) 如果瀏覽器緩存中沒有找到需要的記錄或記錄已經過期,則搜索hosts文件和操作系統緩存。

3) 如果在hosts文件和操作系統緩存中沒有找到需要的記錄或記錄已經過期,則向域名解析服務器發送解析請求。

4) 如果域名解析服務器也沒有該域名的記錄,則開始遞歸+迭代解析。

5) 獲取域名對應的IP后,一步步向上返回,直到返回給瀏覽器。

2.建立TCP連接(三次握手)

3.發起HTTP請求(如果資源就在本地瀏覽器緩存里,那就不需要發出請求到服務端,直接瀏覽器里獲取)

其本質是在建立起的TCP連接中,按照HTTP協議標准發送一個網頁的請求。

4.nginx服務器收到請求,根據請求的文件后綴是html還是php來判斷這是靜態文件還是動態文件,靜態文件直接返回html文件,動態文件會先交給php應用服務器(后端服務器)去處理,處理成靜態html文件返回給瀏覽器,因為瀏覽器只能解析靜態html文件。

5.瀏覽器解析html的時候,會去加載很多靜態文件:js/css/img等等,請求先發送到nginx上,通過修改nginx配置,location可以指定這些請求都轉發到oss源站上。設置了cdn加速的話,在nginx上直接搭建cdn,nginx就是一個cdn節點服務器,第一次nginx上沒有資源,會直接到oss獲取,oss獲取到資源返回給nginx節點服務器,同時在nginx上緩存一份靜態資源,以后再次請求就可以直接到nginx上獲取資源,不需要nginx轉發請求,再到oss上獲取資源。nginx在這里作為一個前端服務器,處理靜態資源的。

cdn不是服務器,cdn是內容分發網絡,一種應用在服務器上的加速技術。cdn通過在網絡各處放置節點服務器,所構成的在現有的互聯網基礎之上的一層智能虛擬網絡。CDN系統能夠實時根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息,將用戶的請求重新導向離用戶最近的服務器節點上。cdn是一種加速服務,收費的。原理是在各個地方部署服務器,把前端內容緩存到這些服務器中(第一次訪問后)。

什么是CDN?如果我在廣州訪問杭州的淘寶網,跨省的通信必然造成延遲。如果淘寶網能在廣東建立一個服務器,靜態資源我可以直接從就近的廣東服務器獲取,必然能提高整個網站的打開速度,這就是CDN。CDN叫內容分發網絡,是依靠部署在各地的邊緣服務器,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度。

解析到js的時候,JavaScript 中調用 XMLHttpRequest 對象,通過 XMLHttpRequest 對象向服務器發送http請求,來請求數據,服務器使用 JSPPHPServlet,ASP.net 等與數據庫交互,檢索數據,服務器將 XML 數據或 JSON 數據發送到nginx服務器,再返回給客戶端。瀏覽器渲染html模板和數據,最終顯示出用戶看到的畫面。

 

 

ps:跨域訪問

user訪問服務器的頁面A,頁面A同時又要訪問另一個網站B的某個資源。這就叫做跨域訪問。會引起CSRF攻擊。

 

 

 

 





 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM