1. 程式人生 > >當你輸入一個網址/點擊一個鏈接,發生了什麽?(以www.baidu.com為例)

當你輸入一個網址/點擊一個鏈接,發生了什麽?(以www.baidu.com為例)

var aid 查找 style str 在服務器 開始 傳輸 http響應

>>>點擊網址後,應用層的DNS協議會將網址解析為IP地址;

DNS查找過程:

瀏覽器會檢查緩存中有沒有這個域名對應的解析過的IP地址,如果緩存中有,這個解析過程就將結束。

如果用戶的瀏覽器緩存中沒有,瀏覽器會查找操作系統緩存(hosts文件)中是否有這個域名對應的DNS解析結果。

若還沒有,此時會發送一個數據包給DNS服務器,DNS服務器找到後將解析所得IP地址返回給用戶。

>>>在應用層,瀏覽器會給web服務器發送一個HTTP請求;

請求頭為:GET http://www.baidu.com/HTTP/1.1

>>>在傳輸層,(上層的傳輸數據流分段)HTTP數據包會嵌入在TCP報文段中;

TCP報文段需要設置端口,接收方(百度)的HTTP端口默認是80,本機的端口是一個1024-65535之間的隨機整數,這裏假設為1025,這樣TCP報文段由TCP首部(包含發送方和接收方的端口信息)+ HTTP數據包組成。

>>>在網絡層中,TCP報文段再嵌入IP數據包中;

IP數據包需要知道雙方的IP地址,本機IP地址假定為192.168.1.5,接受方IP地址為220.181.111.147(百度),這樣IP數據包由IP頭部(IP地址信息)+TCP報文段組成。

>>> 在網絡接口層,IP數據包嵌入到數據幀(以太網數據包)中在網絡上傳送;

數據幀中包含源MAC地址和目的MAC地址(通過ARP地址解析協議得到的)。這樣數據幀由頭部(MAC地址)+IP數據包組成。

>>>數據包經過多個網關的轉發到達百度服務器,請求對應端口的服務;

服務接收到發送過來的以太網數據包開始解析請求信息,從以太網數據包中提取IP數據包—>TCP報文段—>HTTP數據包,並組裝為有效數據交與對應線程池中分配的線程進行處理,在這個過程中,生成相應request、response對象。

>>>請求處理完成之後,服務器發回一個HTTP響應;

請求處理程序會閱讀請求及它的參數和cookies。它會讀取也可能更新一些數據,並將數據存儲在服務器上。處理完畢後,數據通過response對象給客戶輸出信息,輸出信息也需要拼接HTTP協議頭部分,關閉後斷開連接。斷開後,服務器端自動註銷request、response對象,並將釋放對應線程的使用標識(一般一個請求單獨由一個線程處理,部分特殊情況有一個線程處理多個請求的情況)。響應頭為:HTTP/1.1200 OK

>>>瀏覽器以同樣的過程讀取到HTTP響應的內容(HTTP響應數據包),然後瀏覽器對接收到的HTML頁面進行解析,把網頁顯示出來呈現給用戶。

客戶端接收到返回數據,去掉對應頭信息,形成也可以被瀏覽器認識的頁面HTML字符串信息,交與瀏覽器翻譯為對應頁面規則信息展示為頁面內容。

轉自:http://blog.csdn.net/random__walker/article/details/52040146

當你輸入一個網址/點擊一個鏈接,發生了什麽?(以www.baidu.com為例)