有這樣乙個經典的面試題:
在瀏覽器中輸入乙個url(例如:www.baidu.com),然後回車,這期間都經歷了什麼?
請暫停下來,不要繼續看。閉上眼思考一下答案。
首先我們普及一些基本概念。
1.dns,一般指網域名稱系統,提供將網域名稱轉換為對應ip的服務。在瀏覽器中輸入url(www.baidu.com),先還原一下這個請求,在實際發起請求時,url是這個樣子的()2.ip,網際互連協議。通常用它指計算機的位址,有ip就能找到對應的伺服器。
3.port,埠,伺服器提供服務需要監聽指定埠,如果有人訪問該埠,那麼伺服器會處理請求,返回響應。
4.http,超文字傳輸協議,網路傳輸內容的協議。https就是http+ssl。
5.html,超文字標記語言。css,層疊樣式表。js,**程式語言。這三個語言配合,可以確定介面最終展示的是什麼樣子。
http是請求協議,中間是網域名稱www.baidu.com,分號後面緊跟著的是埠,最後的/指請求伺服器根目錄的介面。
協議://網域名稱或ip:埠/介面位址
知道這個以後,那麼回車,瀏覽器拿到網域名稱並不能找到伺服器在哪,需要經過請求dns,將網域名稱轉為ip位址。然後拿著ip去通過路由器**請求,這期間可能經過多個路由器或者閘道器,最終找到伺服器。
找到伺服器後,伺服器本身又有65535個埠,相當於有這麼多扇門,那麼從哪個門進去,這個之後就需要瀏覽器附加的80埠了,找到這個ip位址的伺服器,從80埠進去,進去以後帶著/找到對應接待的人,這個人說給你這個文字你回去吧。
然後伺服器給瀏覽器返回了乙個html格式的文字。瀏覽器根據html,以及檔案附帶的css和js將頁面渲染出來。
總結一下:
輸入網域名稱
->瀏覽器偷偷加上協議http和埠80
->請求dns服務,將網域名稱轉為ip
->根據ip通過路由找到伺服器
->根據埠80進入到伺服器
->說我要/下的東西
->伺服器經過處理,將首頁html返回給瀏覽器
->瀏覽器根據html語言語法規則,將頁面渲染出來。
這個過程省略了很多細節,包括瀏覽器網域名稱轉ip的時候,會先看瀏覽器快取是不是已經有轉換過的值了,然後看本機hosts檔案和快取,如果前面都沒能把網域名稱轉為ip才會去請求dns,這也是我們上網為什麼要配置dns(8.8.8.8)
拿著ip去找伺服器的過程其實也更加複雜。
會先計算此ip是否屬於當前區域網,屬於當前區域網直接找。
不屬於就將請求**到閘道器也就是我們常用的路由器,路由器將ip路由到合適的交換機或者路由器,直到找到伺服器。
這裡會涉及到mac位址,icmp協議,路由協議,網段等計算機網路知識。
找到伺服器,並進入埠後,誰在提供服務?可能是乙個nginx,也可能是乙個go語言程式,或者是springboot程式。這裡是服務實現的不同。
那麼在頁面展示上也有所不同。前後端分離,是先把頁面結構html發到瀏覽器,然後js**再請求伺服器獲取json資料渲染到頁面上。前後端不分離則是計算機把資料準備好,並且嵌入到html中,才傳送到瀏覽器。
深入的挖掘,會發現簡單的背後會隱藏很多細節,那麼你理解不透徹,自然就俘獲不了面試官的青睞。
當然這個問題說開來,你還可以回答分布式的知識,比如請求到了伺服器,最前面是乙個api-gateway,先做了許可權校驗,是否是惡意請求,是否是爬蟲,是否是ddos攻擊,檢測沒問題,通過服務註冊中心將請求**到真正的服務上去響應。
當然,裝逼還是需要自身水平過硬,乙個知識點不清楚,還是不要拿出來。
在瀏覽器中輸入乙個URL都發生了什麼
瀏覽器檢視本地快取 cookie 如果請求資源在本地快取中,直接將資源提供給客戶端,否則進行查詢 瀏覽器解析url獲取協議 主機 埠等資訊,更具網域名稱獲取主機ip dns解析 找閘道器mac,將目的mac改為閘道器mac傳送到閘道器 根據目的ip判斷和源ip是否在同一網段 根據子網掩碼計算 在同一...
瀏覽器輸入URL發生了什麼
這是一道經典的面試題,這道面試題不光前端面試會問到,後端面試也會被問到。這道題涉及很多的知識點,面試官會通過這道題了解你對哪一方面的知識比較擅長,然後繼續追問看看你的掌握程度。當然我寫的這些也只是我的一些簡單的理解,從前端的角度出發,我覺得首先回答必須包括幾個基本的點,然後在根據你的理解深入回答。1...
在瀏覽器輸入url後發生了什麼
問題 1 網域名稱解析 2 發起tcp的3次握手 3 建立tcp連線後發起的http請求 4 伺服器端響應http請求,瀏覽器得到html 5 瀏覽器解析html 並請求html 中的資源 6 瀏覽器對頁面進行渲染呈現給使用者 1.網域名稱解析 dns解析的詳細過程 1 解析網域名稱時,瀏覽器會首先...