面試時經常被問到:瀏覽器訪問乙個頁面的時候背後的步驟是怎樣的?
我往往是把http請求和響應講了一下。
現在想想,感覺僅僅回答http請求和響應有點太窄了。
所以,這裡主要從計算機網路的角度將瀏覽器訪問乙個頁面的背後的過程進行乙個較為詳細的解讀。
瀏覽器通常有三個途徑來找ip位址。
快取。包括瀏覽器的dns快取和os的dns快取。
host檔案。瀏覽器會去本地的host檔案中尋找網域名稱對應的ip位址。
網域名稱伺服器查詢。向本地網域名稱伺服器求助(一般是路由器),如果得不到還得向更高層次的網域名稱伺服器(根網域名稱伺服器、頂級網域名稱伺服器、許可權網域名稱伺服器)求助。本地網域名稱伺服器向高階網域名稱伺服器查詢可以是迭代查詢或遞迴查詢。
這些資源的請求和獲取可以通過http完成。
而http協議位於應用層,其是建立在傳輸層的tcp協議的基礎之上。
想要完成http請求和響應還需要通過tcp建立乙個瀏覽器跟伺服器的連線。
http的預設埠是80。
https的預設埠是443。
當沒有特別指定的時候,伺服器的埠就是預設埠。
瀏覽器的請求方埠是動態埠(範圍49152~65535),並不固定。
tcp連線的建立需要通過「三次握手」來完成。
而tcp連線的建立還需要通過許多傳輸層以下協議棧的協議來提供支援:
當建立起tcp連線後,就可以傳送http請求了。
瀏覽器向伺服器傳送乙個http請求來請求資源。
伺服器收到乙個http請求後,對請求進行相應的處理,比如說身份的驗證、根據使用者身份確定資源的具體內容(比如使用者的個人資訊頁面,根據使用者id從資料庫獲取相應資訊再生成html檔案)。
在完成相應的處理後,通過http響應將資源傳送給瀏覽器。
當然,有可能在處理的時候發生一些情況,比如說:使用者身份驗證失敗,該使用者身份不夠許可權訪問該資源,伺服器處理過程中出現錯誤等。
所以,在http響應中還要加入相應的狀態碼以告訴瀏覽器當前請求的處理狀態。
在http響應後,面臨著是否釋放tcp連線的問題。這就是http中的長連線和短連線問題。
tcp連線的釋放需要通過「四次揮手」來完成。
當瀏覽器收到伺服器返回的http響應後,需要對http響應的內容進行解析,並渲染到螢幕上。
例如,http響應的內容是乙個html檔案,那麼瀏覽器對html檔案進行解析,並把其表示的內容渲染到螢幕上。html檔案中可能還包含了外部檔案,比如說,那麼還要再重複一下之前的過程,再從伺服器中獲取該檔案。
瀏覽器可以對拿到手的資源進行快取,避免對乙個資源的重複請求獲取,節約時間提公升效能。
資源的快取狀態是由http header來決定的。
瀏覽器快取可以分為兩類:強快取和協商快取
參考:
瀏覽器訪問乙個位址的大概操作步驟
如我們需要訪問www.imooc.com位址,過程如下 1.瀏覽器 如chrome 搜尋自身的dns 快取 2.搜尋作業系統自身的dns快取 瀏覽器沒有找到快取或快取已經失效 3.讀取本地的 host 檔案 4.瀏覽器 發起乙個dns 的 乙個系統呼叫 1 寬頻運營商伺服器檢視本身快取 2 運營商伺...
瀏覽器傳送乙個請求到返回乙個頁面的具體過程
第一步,解析網域名稱,找到ip 瀏覽器會快取dns一段時間,一般2 30分鐘不等,如果有快取,直接返回ip,否則下一步。快取中無法找到ip,瀏覽器會進行乙個系統呼叫,查詢hosts檔案。如果找到,直接返回ip,否則下一步。進行1 和2 本地查詢無果,只能借助於網路,路由器一般都會有自己的dns快取,...
php獲取訪問者瀏覽頁面的瀏覽器型別
方法如下 檢查使用者的agent字串,它是瀏覽器傳送的http請求的一部分。用 server http user agent 得到agent字串資訊。比如 php echo server 程式設計客棧 http user agent 有可能是列印出這樣的 mozilla 4.0 compatible...