從URL輸入到頁面展現的過程

上網已經成為我們每個人生活中一項重要的內容了,當我們打開瀏覽器,在地址欄中輸入相應的網址並按下了回車鍵,既會在頁面中呈現所需的相關信息。那麼,在這背後都進行了哪些技術步驟,才會將豐富的信息內容載入出來,展現在我們眼前呢。

從URL的輸入到頁面的展現,大概會經過以下幾個過程:

  1. 在瀏覽器中輸入url
  2. DNS域名解析
  3. 伺服器處理請求
  4. 網站處理流程
  5. 瀏覽器顯示頁面信息

一、在瀏覽器輸入URL

URL(Uniform Resource Locator,統一資源定位符)

由一串簡單的文本字元組成,他的作用是用於定位互聯網上資源的地址。URL通常由以下幾部分組成:傳輸協議、域名、埠、文件路徑。

以我的知乎主頁為例,"https://www.zhihu.com/people/xiao-lan-miao-37-19

"這一串字元即為URL。

  • 協議部分

通過特定的傳輸協議,獲得指定文檔的內容。

該URL的協議部分為「 https: 」,這代表網頁使用的是https協議。在Internet中可以使用多種協議。常見的協議有:」 http:// 」 (超文本傳輸協議,信息是明文傳輸)、「 https:// 」(進行加密的網路傳輸協議)、" file:// "(本地文件傳輸協議,file協議主要用於訪問本地計算機中的文件)、" ftp:// "(文件傳輸協議)," mailto: "(資源為電子郵件地址,通過SMTP訪問)。還有一種URL前面沒有加指定協議,它是指獲取該資源需要使用的協議與當前的URL是保持一致的。

  • 域名部分

用來確定伺服器在互聯網上的位置,域名的目的是便於記憶和溝通的一組伺服器的地址,是唯一不可重複的。

該URL的域名部分為zhihu.com

  • 埠部分

跟在域名後面的為埠編號,域名和埠之間使用「 :」分隔開。默認埠一般在URL中不展現。當Web伺服器採用的不是默認埠時,就需要寫明服務所用的埠。埠號的作用,主要是區分服務類別和在同一時間進行多個會話。

常用的應用協議和對應的埠號如下:

  • 文件路徑

一般用來表示主機上的一個目錄或文件地址(即存儲的位置),由零或多個「 / 」符號隔開,劃分為多個層次進行描述。

該URL的文件路徑為/people/xiao-lan-miao-37-19

二、DNS域名解析

當你在瀏覽器中輸入URL後,你使用的電腦會發出一個DNS請求(將域名轉化為IP地址的請求)。對於瀏覽器,實際上並不知道"https://www.zhihu.com/people/xiao-lan-miao-37-19"到底是什麼東西,需要確認其中域名所在伺服器的IP地址才能找到目標網站(瀏覽器需要對IP地址進行識別,才能夠進一步傳遞網址和信息內容)。那麼,將域名解析成對應的伺服器IP地址這項工作,就是由DNS伺服器來完成。

DNS(Domain Name System,域名系統)

主要進行將主機名和域名轉換為IP地址的工作。把便於用戶記憶的特定域名轉換成為能夠被機器直接讀取的IP數串。

IP地址(Internet Protocol Address,互聯網協議地址)

IP協議提供的一種統一的地址格式,它為互聯網上的每一個網路和每一台主機分配一個邏輯地址。在互聯網中的每一台主機都有IP地址,IP協議就是使用這個地址在主機之間傳遞信息,形如 192.168.0.1 。如果沒有IP地址,就無法找到相應的主機進行信息交換,這個設備也就無法連接到互聯網。

相關問題:

為什麼要用域名,不直接使用IP地址?

  • IP地址不容易記住,特定的域名,更加方便用戶記憶或辨識。
  • IP地址與域名並不是一對一的映射關係,一個域名後面可以對應多台設備的IP地址,一個IP地址也可以綁定多個域名。如果直接使用IP地址的話,可能無法準確的定位你想要訪問的網站。

區域網IP與公網IP之間的區別

  • 內網也就是區域網,內網的計算機以NAT(網路地址轉換)協議,通過一個公共的網關訪問Internet。內網的計算機可向Internet上的其他計算機發送連接請求,但Internet上其他的計算機無法向內網的計算機發送連接請求。
  • 公網IP是處於整個互聯網可訪問的一個狀態當中,公網IP都是需要購買的。

在同樣的區域網下,如果知道對方的IP就可以進行訪問,公網IP是處於整個互聯網可訪問的狀態中。

域名解析的流程:

  1. 查找瀏覽器緩存——我們日常瀏覽網站時,瀏覽器會緩存DNS記錄一段時間。如果以前我們訪問過該網站,那麼在瀏覽器中就會有相應的緩存記錄。因此,我們輸入網址後,瀏覽器會首先檢查緩存中是否有該域名對應的IP信息。如果有,則直接返回該信息供用戶訪問網站,如果查詢失敗,會從系統緩存中進行查找。
  2. 查找系統緩存——從hosts文件中查找是否有存儲的DNS信息(MAC端,可在「終端」中輸入命令cat etc/hosts找到hosts文件位置),如果查詢失敗,可從路由器緩存中繼續查找。
  3. 查找路由器緩存——如果之前訪問過相應的網站,一般路由器也會緩存信息。如果查詢失敗,可繼續從 ISP DNS 緩存查找。
  4. 查找ISP DNS緩存——從網路服務商(例如電信)的DNS緩存信息中查找。
  5. 如果經由以上方式都沒找到對應IP的話,則向根域名伺服器查找域名對應的IP地址,根域名伺服器把請求轉發到下一級,逐層查找該域名的對應數據,直到獲得最終解析結果或失敗的相應。

根域名伺服器,根伺服器主要用來管理互聯網的主目錄。是互聯網域名解析系統(DNS)中最高級別的域名伺服器。

相關問題:

什麼是DNS劫持?

DNS劫持(Domain Name System,域名劫持),是指在劫持的網路範圍內攔截域名解析的請求,分析請求的域名,把審查範圍以外的請求放行,返回假的IP地址或者什麼都不做使請求失去響應,其效果就是對特定的網路不能訪問或訪問的是假網址。簡單來說,就是你輸入的是知乎的網址,但是卻跳轉到了百度的頁面。

為什麼修改DNS為114.114.114.114或8.8.8.8可以解決電腦上不了網的問題?

當你使用手機端可以正常打開網站,但是在電腦端訪問網站失敗的話,那麼可能是DNS配置出現了問題,或者是在路由器緩存中解析查找錯誤,無法找到對應的IP地址。那麼這時我們可以在電腦端更改DNS進行單獨配置即可正常訪問(MAC端,打開「網路偏好設置」——「高級」——「DNS」進行修改)。8.8.8.8是谷歌提供的免費DNS伺服器的IP地址,114.114.114.114是電信的。

三、伺服器處理請求

瀏覽器通過IP地址找到對應的伺服器,要求建立TCP鏈接,此時伺服器開始處理用戶請求。

伺服器是什麼?

伺服器是一台安裝系統的機器。常見的系統有Linux、Windows Server2012等。系統里安裝的處理請求的應用叫Web server。

伺服器如何處理請求?

由伺服器上安裝的處理請求的應用(Web Server)來處理。

常見的Web伺服器有:Apache、Nginx、IIS、Lighttpd。

Web伺服器接收用戶的Requset交給網站代碼或反向代理到其他伺服器。

TCP是什麼?

TCP是互聯網中的傳輸層協議,提供可靠的鏈接服務,採用三次握手確認一個連接:

  1. 瀏覽器向伺服器發送建立連接的請求。
  2. 伺服器接收到瀏覽器發送的請求後,想瀏覽器發送統一連接的信號。
  3. 瀏覽器接受到伺服器發出的同意連接的信號後,再次向伺服器發出確認連接的信號。

當三次握手返程,TCP客戶端和服務端成功的建立連接,就可以開始傳輸數據了。

四、網站處理流程

用戶輸入網址後向伺服器發送內容請求,伺服器接收到請求後觸發Controller(控制器),控制器從Model(模型)和視圖(View)中獲取各種數據信息進行處理,最後視圖(View)將數據渲染為HTML使得頁面完整的呈獻給用戶。

MVC是什麼

MVC是一種設計模式,全名是Model View Controller,是模型(Model)- 視圖(View)- 控制器(Controller)的縮寫。

  • Model(模型)

    是應用程序中用於處理應用程序數據邏輯的部分。

    通常模型對象負責在數據苦衷存取數據。
  • View(視圖)

    是應用程序中處理數據顯示的部分。

    通常視圖是一句模型數據創建的。

    而這一部分也是我們前端工作中很重要的一項內容。
  • Controller(控制器)

    是應用程序中處理用戶交互的部分。

    通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。

五、瀏覽器顯示頁面信息

  • HTML字元串被瀏覽器接收後被一句句讀取解析。
  • 解析到link標籤後重新發送請求獲取CSS。
  • 解析到script標籤後發送請求獲取JS,並執行代碼。
  • 解析到img標籤後發送請求獲取圖片資源。
  • 瀏覽器根據HTML和CSS計算得到渲染書,繪製到屏幕上。
  • JS會被執行,頁面展現。

以上是從URL輸入到頁面展現其中的過程,對於理解不到位或者錯誤的地方煩請大家指正,感謝。


推薦閱讀:

百姓網的前端架構是怎樣的?
2017年前端有什麼樣變化?即將來臨的2018有什麼樣的期待?
作為一個小白如何讀vue的源碼?
2017前端開發的行業狀況是怎樣的?對於自學web前端的人從業有何建議?
國外優秀的H5頁面,nice到不行

TAG:URL | 前端入门 | 前端工程师 |