1. 程式人生 > >通過瀏覽器請求一個域名IP

通過瀏覽器請求一個域名IP

  1. 瀏覽器內部都有dns客戶端,它先查詢本地dns快取中是否有該域名的IP,如果有就直接去訪問該IP。如果沒有,該dns客戶端先要查詢自己主機所設定的dns伺服器,然後去該dns伺服器去查詢IP。
  2. 如果該dns伺服器本地快取中有該域名的A記錄(域名與IP地址的對應記錄),則直接返回給瀏覽器中的dns客戶端。沒有該域名的A記錄,就通過遞迴的方式向上詢問其他dns伺服器,也許問到了根dns伺服器才找到了答案。於是這條路上所有被詢問過的dns伺服器,都將此域名對應的A記錄快取到自己的cache中,以備下次再有相同域名查詢時好直接返回。
  3. 瀏覽器中的dns客戶端得到此域名的IP地址後,也將該域名和IP放在自己的快取中,以備下次使用者再鍵入統一域名時,避免再查一次IP。
  4. 瀏覽器開始通過網路用http協議訪問該IP地址的80埠(預設是80埠,除非特別指定)。
  5. 一般情況下該IP對應的裝置不是最終的Web伺服器,很少有人把Web伺服器直接暴露在公網。假設該IP對應的裝置是臺網關(一般是硬體路由裝置),該閘道器檢查本地快取中是否有相關Web伺服器的快取,若有則直接將該http請求分配給快取中的Web伺服器。否則從伺服器列表中重新分配一臺Web伺服器,將該http請求轉發給該Web伺服器處理。隨後將該Web伺服器的IP地址(一般是內網地址)和埠號快取起來,以備下次該使用者的請求到來時,依然給該Web伺服器。有的閘道器可以識別使用者cookie資訊,從而可以將請求再次落到上一個請求的Web伺服器上。
  6. Web伺服器拿到請求後,如果是靜態請求,先檢查自己的快取中是否有該頁面的記錄,否則直接從硬碟上取出頁面,將其返回後,再存入本地靜態快取中。如果動態請求,先交給自己的cgi去處理。
  7. cgi拿到資料後,先檢查自己的快取系統,如memcache,如果快取中沒有,與資料庫建立連線,向資料庫發出請求。
  8. 資料庫也是先檢查自己的快取,如沒有結果集,則從表中檢索到資料後返回,並將結果快取起來。
  9. cgi拿到資料後,返回給Web伺服器,並將資料快取到memcache中。
  10. Web伺服器拿到資料後,將資料返回給閘道器。由於是動態資料不需要快取。
  11. 閘道器拿到資料後,直接返回給瀏覽器。
  12. 如果瀏覽器發現其中有靜態資料,如圖片,也將靜態資料快取到使用者的internet臨時目錄。

    參考文獻:《作業系統真象還原》,鄭剛