從一道阿里面試題談起:
用戶在瀏覽器中輸入www.taobao.com直到看到頁面之間發生了什么?
前端面試時基本上都會被問到這類關於http協議相關的內容,不止是為了應對面試,實際開發時也會一直用到http協議的知識,因此,整理一下這方面內容非常有必要。
回到上面的問題,這個過程大致分如下幾步:
1、輸入地址
2、瀏覽器查找域名的 IP 地址
3、瀏覽器向 web 服務器發送一個 HTTP 請求
4、服務器的永久重定向響應
5、瀏覽器跟蹤重定向地址
6、服務器處理請求
7、服務器返回一個 HTTP 響應
8、瀏覽器顯示 HTML
9、瀏覽器發送請求獲取嵌入在 HTML 中的資源(如CSS、JS、圖片、音頻、視頻等)
1、輸入地址
當我們開始在瀏覽器中輸入網址的時候,瀏覽器其實就已經在智能的匹配可能的 url 了,它會從歷史記錄、書簽等地方找到已經輸入的字符串可能對應的 url,然后給出智能提示,讓你可以補全url地址。 Chrome 瀏覽器甚至會直接從緩存中把網頁展示出來,也就是說,你還沒有按下 Enter,頁面就出來了。
2、瀏覽器查找域名的 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這里,你自己去查吧,本服務器比較忙,只能幫你到這里了...
未完待續