1. 程式人生 > >瀏覽器輸入URL到伺服器響應的過程

瀏覽器輸入URL到伺服器響應的過程

1.瀏覽器輸入url
2.DNS系統完成域名解析IP得到地址;先查瀏覽器快取,沒有再查尋系統快取,即本地host檔案,再沒有向ISP的DNS伺服器請求解析域名得到IP地址的對映關係
3.瀏覽器和伺服器之間建立TCP連線,通過socket傳送HTTP請求;傳送端從應用層往鏈路層,接收端從鏈路層往應用層。
4.伺服器響應請求,處理,返回資料;事實上,在進入伺服器之前,可能還會先經過負責負載均衡的機器,其目的為將請求合理地分配到多個伺服器上,在經過了負載均衡後,請求真正地到了伺服器的Web Server,比如 Apache,Node.JS等,伺服器處理請求返回http響應。
5.客戶端收到資料,TCP連線釋放,瀏覽器載入html資料進行頁面渲染

1.瀏覽器識別URL
什麼是URL?
url即統一資源定位器,基本URL包含模式(或稱協議)、伺服器名稱(或IP地址)、路徑和檔名。格式可以分成兩部分。

第一部分:模式/協議(scheme):它告訴瀏覽器如何處理將要開啟的檔案。最常用的模式是超文字傳輸協議(Hypertext Transfer Protocol,縮寫為HTTP),這個協議可以用來訪問網路。其他協議如下:
http 超文字傳輸協議資源
https 用安全套接字層傳送的超文字傳輸協議
ftp 檔案傳輸協議
mailto 電子郵件地址
ldap 輕型目錄訪問協議
file 當地電腦或網上分享的檔案
news Usenet新聞組
gopher Gopher協議
telnet Telnet協議
第二部分
檔案所在的伺服器的名稱或IP地址,後面是到達這個檔案的路徑和檔案本身的名稱。伺服器的名稱或IP地址後面有時還跟一個冒號和一個埠號。它也可以包含接觸伺服器必須的使用者名稱稱和密碼。路徑部分包含等級結構的路徑定義,一般來說不同部分之間以斜線(/)分隔。詢問部分一般用來傳送對伺服器上的資料庫進行動態詢問時所需要的引數。
有時候,URL以斜槓“/”結尾,而沒有給出檔名,在這種情況下,URL引用路徑中最後一個目錄中的預設檔案(通常對應於主頁),這個檔案常常被稱為 index.html 或 default.htm
2. DNS系統完成域名查詢
IP地址是網路上標識站點的數字地址,為了方便記憶,採用域名來代替IP地址標識站點地址。域名解析就是域名到IP地址的轉換過程。域名的解析工作由DNS伺服器完成。

查詢瀏覽器快取。不同的瀏覽器儲存DNS記錄的時間是不同的,一般在30秒到2分鐘(開啟 chrome://net-internals/#dns檢視chrome快取)。
查詢系統快取。若瀏覽器快取中沒找到,瀏覽器則會做系統呼叫(windows裡是gethostbyname)進行查詢。它會查詢本地Host檔案,Host的位置因系統而異。
若Host檔案也沒有,則向DNS伺服器發出查詢請求,DNS伺服器一般為路由器或 ISP 的快取 DNS 伺服器。
ISP的快取DNS伺服器進行遞迴查詢,從根域名伺服器查到頂級域名伺服器再查到許可權域名伺服器。最後得到目標域名的IP地址。
到此已經獲得了目標域名的IP地址。接下來就是通過 Socket 傳送資料
3.瀏覽器和伺服器之間建立TCP連線
TCP/IP 定義了電子裝置如何連入因特網,以及資料如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。

利用TCP/IP通訊時,是通過分層順序和對方通訊的。傳送端從應用層往鏈路層,接收端從鏈路層往應用層。

4.瀏覽器發出請求
建立連線後,瀏覽器會發送一個HTTP請求,HTTP請求包含的資訊可以分成如下三部分:

請求行(包含請求的方法、URL地址和協議版本)
請求頭(Request Header)
請求正文
這時,我們在回過頭來看在TCP協議上傳送HTTP請求的過程,即:

客戶端在應用層傳送HTTP請求
在傳輸層(TCP協議)對HTTP請求進行封裝,加入了埠號等資訊
在網路層(IP協議)增加了IP地址
在鏈路層加入了網絡卡的MAC地址
到此,一個發向對方的請求就封裝好了,進入下一部分
5. 伺服器響應請求,將資料傳輸給瀏覽器
事實上,在進入伺服器之前,可能還會先經過負責負載均衡的機器,其目的為將請求合理地分配到多個伺服器上,在經過了負載均衡後,請求真正地到了伺服器的Web Server,比如 Apache,Node.JS等。
伺服器收到客戶請求之後,進行了處理,需要把結果返回,也就是返回一個HTTP響應。HTTP響應與HTTP請求類似,也包含三個部分,在此不再贅述。

  1. TCP連線釋放
  2. 瀏覽器進行頁面的載入
    這個過程即瀏覽器顯示HTML的過程。

渲染引擎一邊解析HTML,一邊將標籤用來構建DOM樹。當他解析到CSS檔案或