一次訪問網頁請求的全過程詳解


第一步:瀏覽器輸入域名

例如輸入:www.csdn.net/

第二步:瀏覽器查找域名的IP地址

瀏覽器會把輸入的域名解析成對應的IP,其過程如下:

  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地址。本地域名服務器最后把結果告訴主機。

第三步 :瀏覽器與目標服務器建立TCP連接

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

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

第四步:瀏覽器通過http協議發送請求

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

第五步:某些服務會做永久重定向響應

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

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

第六步:瀏覽器跟蹤重定向地址

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

第七步:服務器處理請求

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

第八步:服務器發出一個HTML響應

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

第九步:釋放TCP連接

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

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

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

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

第十步:瀏覽器顯示頁面

在瀏覽器沒有完整接受全部HTML文檔時,它就已經開始顯示這個頁面了,瀏覽器接收到返回的數據包,根據瀏覽器的渲染機制對相應的數據進行渲染。渲染后的數據,進行相應的頁面呈現和腳步的交互。

第十一步:瀏覽器發送獲取嵌入在HTML中的其他內容

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



原文鏈接:https://blog.csdn.net/jiao_0509/java/article/details/82491299


免責聲明!

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



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