1. 程式人生 > >瀏覽器傳送一個請求到返回一個頁面的具體過程

瀏覽器傳送一個請求到返回一個頁面的具體過程

第一步,解析域名,找到ip

  1. 瀏覽器會快取DNS一段時間,一般2-30分鐘不等,如果有快取,直接返回ip,否則下一步。
  2. 快取中無法找到ip,瀏覽器會進行一個系統呼叫,查詢hosts檔案。如果找到,直接返回ip,否則下一步。
  3. 進行1 和2 本地查詢無果,只能藉助於網路,路由器一般都會有自己的DNS快取,ISP服務商DNS快取,這時一般都能夠得到相應的ip,如果還是無果,只能藉助於DNS遞迴解析了。
  4. 這時ISP的DNS伺服器就會開始從根域名伺服器開始遞迴搜尋,從.com 頂級域名伺服器,到baidu的域名伺服器。
    到這裡,瀏覽器就獲得網路ip,在DNS解析過程中,常常解析出不同的IP。

第二步,瀏覽器於網站建立TCP連線

瀏覽器利用ip直接網站主機通訊,瀏覽器發出TCP連線請求,主機返回TCP應答報文,瀏覽器收到應答報文發現ACK標誌位為1,表示連線請求確認,瀏覽器返回TCP()確認報文,主機收到確認報文,三次握手,TCP連線建立完成。

第三步, 瀏覽器發起預設的GET請求

瀏覽器向主機發起一個HTTP-GET方法報文請求,請求中包含訪問的URL,也就是http://www.baidu.com/還有User-Agent使用者瀏覽器作業系統資訊,編碼等,值得一提的是Accep-Encoding和Cookies項。Accept-Encoding一般採用gzip,壓縮之後傳輸html檔案,Cookies如果是首次訪問,會提示伺服器簡歷使用者快取資訊,如果不是,可以利用Cookies對應鍵值,找到相應快取,快取裡面存放著使用者名稱,密碼和一些使用者設定項

第四步,顯示頁面或返回其他

返回狀態碼200 OK,表示伺服器可以響應請求,返回報文,由於在報頭中Content-type為“text/html”,瀏覽器以HTML形式呈現,而不是下載檔案。
但是對於大型網站存在多個主機站點,往往不會直接返回請求頁面,而是重定向。返回的狀態碼就不是 200 OK, 而是301,302以3開頭的重定向嗎。瀏覽器在獲取了重定向響應後,在響應報文中Location項找到重定向地址,瀏覽器重新第一步訪問即可。