計算機網絡:在瀏覽器輸入URL,按下回車後究竟發生了什麼?

如:在瀏覽器種輸入:https://www.csdn.net/

在這整個過程中,大致可以分爲以下幾個過程

  • DNS域名解析
  • TCP連接
  • HTTP請求
  • 處理請求返回HTTP響應
  • 關閉連接
  • 頁面渲染
  • 瀏覽器發送獲取嵌入在HTML中的其他內容

1.DNS域名解析

(1)查找瀏覽器緩存:因爲瀏覽器一般會緩存DNS記錄一段時間,不同瀏覽器的時間可能不一樣,一般2-30分鐘不等,瀏覽器去查找這些緩存,如果有緩存,直接返回IP,否則下一步。

(2)查找系統緩存:瀏覽器緩存中找不到IP之後,瀏覽器會進行系統調用(windows中是gethostbyname),查找本機的hosts文件,如果找到,直接返回IP,否則下一步。

(3)查找路由器緩存:如果1,2步都查詢無果,則需要藉助網絡,路由器一般都有自己的DNS緩存,將前面的請求發給路由器,查找ISP 服務商緩存 DNS的服務器,如果查找到IP則直接返回,沒有的話繼續查找。

(4)遞歸查詢:如果以上步驟還找不到,則ISP的DNS服務器就會進行遞歸查詢,所謂遞歸查詢就是如果主機所詢問的本地域名服務器不知道被查詢域名的IP地址,那麼本地域名服務器就以DNS客戶的身份,向其他根域名服務器繼續發出查詢請求報文,而不是讓該主機自己進行下一步查詢。(本地域名服務器地址是通過DHPC協議獲取地址,DHPC是負責分配IP地址的)

(5)迭代查詢:本地域名服務器採用迭代查詢,它先向一個根域名服務器查詢。本地域名服務器向根域名服務器的查詢一般都是採用迭代查詢。所謂迭代查詢就是當根域名服務器收到本地域名服務器發出的查詢請求報文後,要麼告訴本地域名服務器下一步應該查詢哪一個域名服務器,然後本地域名服務器自己進行後續的查詢。(而不是替代本地域名服務器進行後續查詢)。

本例子中:根域名服務器告訴本地域名服務器,下一次應查詢的頂級域名服務器dns.net的IP地址。本地域名服務器向頂級域名服務器dns.net進行查詢。頂級域名服務器dns.net告訴本地域名服務器,下一次應查詢的權限域名服務器dns.csdn.net的IP地址。本地域名服務器向權限域名服務器dns.csdn.net進行查詢。權限域名服務器dns.csdn.net告訴本地域名服務器,所查詢的主機www.csdn.net的IP地址。本地域名服務器最後把結果告訴主機。

2.TCP連接

(1)主機瀏覽器通過DNS解析得到了目標服務器的IP地址後,與服務器建立TCP連接。

(2)TCP3次握手連接:瀏覽器所在的客戶機向服務器發出連接請求報文(SYN標誌爲1);服務器接收報文後,同意建立連接,向客戶機發出確認報文(SYN,ACK標誌位均爲1);客戶機接收到確認報文後,再次向服務器發出報文,確認已接收到確認報文;此處客戶機與服務器之間的TCP連接建立完成,開始通信。

3.HTTP請求

瀏覽器向主機發起一個HTTP-GET方法報文請求。請求中包含訪問的URL,也就是http://www.csdn.com/ ,KeepAlive,長連接,還有User-Agent用戶瀏覽器操作系統信息,編碼等。值得一提的是Accep-Encoding和Cookies項。Accept-Encoding一般採用gzip,壓縮之後傳輸html文件。Cookies如果是首次訪問,會提示服務器建立用戶緩存信息,如果不是,可以利用Cookies對應鍵值,找到相應緩存,緩存裏面存放着用戶名,密碼和一些用戶設置項。

4.處理HTTP請求並響應

服務器在收到瀏覽器發送的HTTP請求之後,會將收到的HTTP報文封裝成HTTP的Request對象,並通過不同的Web服務器進行處理,處理完的結果以HTTP的Response對象返回,主要包括狀態碼,響應頭,響應報文三個部分。

狀態碼主要包括以下部分

1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx:服務器端錯誤–服務器未能實現合法的請求。
響應頭主要由Cache-Control、 Connection、Date、Pragma等組成
響應體爲服務器返回給瀏覽器的信息,主要由HTML,css,js,圖片文件組成

對於大型網站存在多個主機站點,了負載均衡或者導入流量,提高SEO排名,往往不會直接返回請求頁面,而是重定向。返回的狀態碼就不是200OK,而是301,302以3開頭的重定向碼,瀏覽器在獲取了重定向響應後,在響應報文中Location項找到重定向地址,瀏覽器重新第一步訪問即可。

所以這一步又可能分爲幾小步:

(1)某些服務會做永久重定向響應
重定向的作用:重定向是爲了負載均衡或者導入流量,提高SEO排名。利用一個前端服務器接受請求,然後負載到不同的主機上,可以大大提高站點的業務併發處理能力;重定向也可將多個域名的訪問,集中到一個站點;由於baidu.com,www.baidu.com會被搜索引擎認爲是兩個網站,照成每個的鏈接數都會減少從而降低排名,永久重定向會將兩個地址關聯起來,搜索引擎會認爲是同一個網站,從而提高排名。

(2)瀏覽器跟蹤重定向地址
當瀏覽器知道了重定向後最終的訪問地址之後,重新發送一個http請求,發送內容同上。

(3)服務器處理請求
服務器接收到獲取請求,然後處理並返回一個響應。

(4)服務器發出一個HTML響應
返回狀態碼200 OK,表示服務器可以響應請求,返回報文,由於在報頭中Content-type爲“text/html”,瀏覽器以HTML形式呈現,而不是下載文件。

5.關閉連接

在頁面元素傳輸完成後,會選擇關閉連接,此時用到的是TCP四次揮手:

  • 瀏覽器所在主機向服務器發出連接釋放報文,然後停止發送數據;

  • 服務器接收到釋放報文後發出確認報文,然後將服務器上未傳送完的數據發送完;

  • 服務器數據傳輸完畢後,向客戶機發送連接釋放報文;

  • 客戶機接收到報文後,發出確認,然後等待一段時間後,釋放TCP連接;

6.頁面渲染

頁面DOM樹的渲染是個複雜的過程,需要深入瞭解DOM原理。
在瀏覽器沒有完整接受全部HTML文檔時,它就已經開始顯示這個頁面了,瀏覽器接收到返回的數據包,根據瀏覽器的渲染機制對相應的數據進行渲染。渲染後的數據,進行相應的頁面呈現和腳步的交互。

7.瀏覽器發送獲取嵌入在HTML中的其他內容

比如一些樣式文件,圖片url,js文件url等,瀏覽器會通過這些url重新發送請求,請求過程依然是HTML讀取類似的過程,查詢域名,發送請求,重定向等。不過這些靜態文件是可以緩存到瀏覽器中的,有時訪問這些文件不需要通過服務器,直接從緩存中取。某些網站也會使用第三方CDN進行託管這些靜態文件。

發佈了20 篇原創文章 · 獲贊 2 · 訪問量 2612
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章