從一道阿里面試題談起:前端
用戶在瀏覽器中輸入www.taobao.com直到看到頁面之間發生了什麼?web
前端面試時基本上都會被問到這類關於http協議相關的內容,不止是爲了應對面試,實際開發時也會一直用到http協議的知識,所以,整理一下這方面內容很是有必要。面試
回到上面的問題,這個過程大體分以下幾步:數據庫
一、輸入地址windows
二、瀏覽器查找域名的 IP 地址 瀏覽器
三、瀏覽器向 web 服務器發送一個 HTTP 請求緩存
四、服務器的永久重定向響應安全
五、瀏覽器跟蹤重定向地址服務器
六、服務器處理請求網絡
七、服務器返回一個 HTTP 響應
八、瀏覽器顯示 HTML
九、瀏覽器發送請求獲取嵌入在 HTML 中的資源(如CSS、JS、圖片、音頻、視頻等)
一、輸入地址
當咱們開始在瀏覽器中輸入網址的時候,瀏覽器其實就已經在智能的匹配可能的 url 了,它會從歷史記錄、書籤等地方找到已經輸入的字符串可能對應的 url,而後給出智能提示,讓你能夠補全url地址。 Chrome 瀏覽器甚至會直接從緩存中把網頁展現出來,也就是說,你尚未按下 Enter,頁面就出來了。
二、瀏覽器查找域名的 IP 地址
(1)、請求一旦發起,瀏覽器首先要作的事情就是解析這個域名,通常來講,瀏覽器會首先查看本地硬盤的 hosts 文件,看看其中有沒有和這個域名對應的規則,若是有的話就直接使用 hosts 文件裏面的 ip 地址。
(2)、若是在本地的 hosts 文件沒有可以找到對應的 ip 地址,瀏覽器會發出一個 DNS請求到本地的DNS服務器 ,本地DNS服務器通常都是由你的網絡接入服務器商提供,好比中國電信、中國移動。
(3)、你輸入的網址的DNS請求到達本地DNS服務器以後,本地DNS服務器會首先查詢它的緩存記錄,若是緩存中有此條記錄,就直接返回結果,此過程是遞歸的方式進行查詢。若是沒有,本地DNS服務器還要向DNS根服務器進行查詢。
(4)、根DNS服務器沒有記錄具體的域名和IP地址的對應關係,而是告訴本地DNS服務器,你能夠到域服務器上去繼續查詢,並給出域服務器的地址,這個過程是迭代的過程。
(5)、本地DNS服務器繼續向域服務器發出請求,在這個例子中,請求的對象是.com域服務器, .com域服務器收到請求以後,也不會直接返回域名和IP地址的對應關係,而是告訴本地DNS服務器請求的域名的解析服務器地址。
(6)、最後,本地DNS服務器向域名的解析服務器發出請求,這時就能收到一個域名和IP地址對應關係,本地DNS服務器不只要把IP地址返回給用戶電腦,還會把這個對應關係保存在緩存中,以備下次別的用戶查詢時,能夠直接返回結果,加快網絡訪問。
下面這張圖很完美的解釋了這一過程(盜圖,感謝原做者):
概念解釋:
1. 什麼是URL?
統必定位資源符,英文全稱爲Uniform Resource Locator,是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。它最初是由蒂姆·伯納斯·李發明用來做爲萬維網的地址。如今它已經被萬維網聯盟編制爲互聯網標準RFC1738了。
URL有以下常見傳輸協議:
http——超文本傳輸協議
ftp——文件傳輸協議
file——主要用於訪問本地計算機中的文件
https——數據通過加密的超文本傳輸協議
注:開頭只有//不是協議,表明該URL的協議與當前頁面一致。
2. 什麼是IP與IP地址?
IP是在TCP/IP協議中網絡層的主要協議,任務是根據源主機和目的主機的地址傳送數據。爲此目的,IP定義了尋址方法和數據報的封裝結構。
IP是分配給網絡上使用網際協議(英語:Internet Protocol, IP)的設備的數字標籤。常見的IP地址分爲IPv4與IPv6兩大類。IP地址至關於一臺主機的門牌號。
IP地址根據網絡ID的不一樣分爲A,B,C,D,E 五類,其中最經常使用到的是A類B類和C類,常以32二進制組成常以XXX.XXX.XXX.XXX形式表現,每組XXX表明小於或等於255的10進制數。
公網IP:是由國際互聯網分配的惟一的IP地址,是個靜態IP地址。
內網IP:由路由器創建子網分配IP地址。
3. 服務器
服務器,也稱伺服器,是提供計算服務的設備。因爲服務器須要響應服務請求,並進行處理,所以通常來講服務器應具有承擔服務而且保障服務的能力。
服務器的構成包括處理器、硬盤、內存、系統總線等,和通用的計算機架構相似,可是因爲須要提供高可靠的服務,所以在處理能力、穩定性、可靠性、安全性、可擴展性、可管理性等方面要求較高。
在網絡環境下,根據服務器提供的服務類型不一樣,分爲文件服務器,數據庫服務器,應用程序服務器,WEB服務器等。
常見的系統如Linux、windows server 2012。常見的web服務器有Apache、Nginx、IIS、Lighttpd等。
4. 什麼是DNS?
DNS(Domain Name System,域名系統),因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶更方便的訪問互聯網,而不用去記住可以被機器直接讀取的IP數串。經過主機名,最終獲得該主機名對應的IP地址的過程叫作域名解析(或主機名解析)。
通俗的講,咱們更習慣於記住一個網站的名字,好比www.baidu.com,而不是記住它的ip地址,好比:167.23.10.2。而計算機更擅長記住網站的ip地址,而不是像www.baidu.com等連接。由於,DNS就至關於一個電話本,好比你要找www.baidu.com這個域名,那我翻一翻個人電話本,我就知道,哦,它的電話(ip)是167.23.10.2。
DNS劫持:將系統緩存hosts文件裏的域名對應的IP改爲其餘IP,導致用戶訪問該域名時訪問到其餘的網站。
5. DNS查詢的兩種方式:遞歸查詢和迭代查詢
(1)、遞歸解析
當局部DNS服務器本身不能回答客戶機的DNS查詢時,它就須要向其餘DNS服務器進行查詢。此時有兩種方式,如圖所示的是遞歸方式。局部DNS服務器本身負責向其餘DNS服務器進行查詢,通常是先向該域名的根域服務器查詢,再由根域名服務器一級級向下查詢。最後獲得的查詢結果返回給局部DNS服務器,再由局部DNS服務器返回給客戶端。
(2)、迭代解析
當局部DNS服務器本身不能回答客戶機的DNS查詢時,也能夠經過迭代查詢的方式進行解析,如圖所示。局部DNS服務器不是本身向其餘DNS服務器進行查詢,而是把能解析該域名的其餘DNS服務器的IP地址返回給客戶端DNS程序,客戶端DNS程序再繼續向這些DNS服務器進行查詢,直到獲得查詢結果爲止。也就是說,迭代解析只是幫你找到相關的服務器而已,而不會幫你去查。好比說:baidu.com的服務器ip地址在192.168.4.5這裏,你本身去查吧,本服務器比較忙,只能幫你到這裏了...
未完待續