這個問題的回答主要是翻譯自這篇英文文章 http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 。
那么,輸入網址后,實際發生了什么呢?過程如下:
1、輸入網址。
2、瀏覽器查找域名的IP地址。
導航的第一步是通過訪問的域名找出其IP地址。DNS查找過程如下:
- 瀏覽器緩存 – 瀏覽器會緩存DNS記錄一段時間。 有趣的是,操作系統沒有告訴瀏覽器儲存DNS記錄的時間,這樣不同瀏覽器會儲存個自固定的一個時間(2分鍾到30分鍾不等)。
- 系統緩存 – 如果在瀏覽器緩存里沒有找到需要的記錄,瀏覽器會做一個系統調用(windows里是gethostbyname)。這樣便可獲得系統緩存中的記錄。
- 路由器緩存 – 接着,前面的查詢請求發向路由器,它一般會有自己的DNS緩存。
- ISP DNS 緩存 – 接下來要check的就是ISP緩存DNS的服務器。在這一般都能找到相應的緩存記錄。
3. 瀏覽器給web服務器發送一個HTTP請求
4. 網站服務的永久重定向響應
服務器給瀏覽器響應一個301永久重定向響應,為什么服務器一定要重定向而不是直接發會用戶想看的網頁內容呢?其中一個原因跟搜索引擎排名有關。如果一個頁面有兩個地址,就像http://www.igoro.com/
和http://igoro.com/,搜索引擎會認為它們是兩個網站,結果造成每一個的搜索鏈接都減少從而降低排名。而搜索引擎知道301永久重定向是什么意思,這樣就會把訪問帶www的和不帶www的地址歸到同一個網站排名下。還有一個是用不同的地址會造成緩存友好性變差。當一個頁面有好幾個名字時,它可能會在緩存里出現好幾次。
5. 瀏覽器跟蹤重定向地址
現在,瀏覽器知道了要訪問的正確地址,所以它會發送另一個獲取請求。請求頭部一般包括:
Accept
Accept-language
Accept-Encoding
Connection
User-Agent
Cookie
Host
6. 服務器“處理”請求
服務器接收到獲取請求,然后處理並返回一個響應。
7. 服務器發回一個HTML響應
8. 瀏覽器開始顯示HTML
9. 瀏覽器發送請求,以獲取嵌入在HTML中的對象
在瀏覽器顯示HTML時,它會注意到需要獲取其他地址內容的標簽。這時,瀏覽器會發送一個獲取請求來重新獲得這些文件。這些文件就包括CSS/JS/圖片等資源,這些資源的地址都要經歷一個和HTML讀取類似的過程。所以瀏覽器會在DNS中查找這些域名,發送請求,重定向等等…