這是一道面試會經(jīng)常問的問題,平時雖然很常見的操作,但是探究其底層原理,可能并不是一件簡單的事情,于是我從各處搜羅整理下全過程,在這里做分享。
第一步:瀏覽器輸入域名
例如輸入:www.csdn.net/
第二步:瀏覽器查找域名的IP地址
瀏覽器會把輸入的域名解析成對應(yīng)的IP,其過程如下:
1.查找瀏覽器緩存:因為瀏覽器一般會緩存DNS記錄一段時間,不同瀏覽器的時間可能不一樣,一般2-30分鐘不等,瀏覽器去查找這些緩存,如果有緩存,直接返回IP,否則下一步。
2.查找系統(tǒng)緩存:瀏覽器緩存中找不到IP之后,瀏覽器會進行系統(tǒng)調(diào)用(windows中是gethostbyname),查找本機的hosts文件,如果找到,直接返回IP,否則下一步。
3.查找路由器緩存:如果1,2步都查詢無果,則需要借助網(wǎng)絡(luò),路由器一般都有自己的DNS緩存,將前面的請求發(fā)給路由器,查找ISP 服務(wù)商緩存 DNS的服務(wù)器,如果查找到IP則直接返回,沒有的話繼續(xù)查找。
4.遞歸查詢:如果以上步驟還找不到,則ISP的DNS服務(wù)器就會進行遞歸查詢,所謂遞歸查詢就是如果主機所詢問的本地域名服務(wù)器不知道被查詢域名的IP地址,那么本地域名服務(wù)器就以DNS客戶的身份,向其他根域名服務(wù)器繼續(xù)發(fā)出查詢請求報文,而不是讓該主機自己進行下一步查詢。(本地域名服務(wù)器地址是通過DHPC協(xié)議獲取地址,DHPC是負(fù)責(zé)分配IP地址的)
5.迭代查詢:本地域名服務(wù)器采用迭代查詢,它先向一個根域名服務(wù)器查詢。本地域名服務(wù)器向根域名服務(wù)器的查詢一般都是采用迭代查詢。所謂迭代查詢就是當(dāng)根域名服務(wù)器收到本地域名服務(wù)器發(fā)出的查詢請求報文后,要么告訴本地域名服務(wù)器下一步應(yīng)該查詢哪一個域名服務(wù)器,然后本地域名服務(wù)器自己進行后續(xù)的查詢。(而不是替代本地域名服務(wù)器進行后續(xù)查詢)。
本例子中:根域名服務(wù)器告訴本地域名服務(wù)器,下一次應(yīng)查詢的頂級域名服務(wù)器dns.net的IP地址。本地域名服務(wù)器向頂級域名服務(wù)器dns.net進行查詢。頂級域名服務(wù)器dns.net告訴本地域名服務(wù)器,下一次應(yīng)查詢的權(quán)限域名服務(wù)器dns.csdn.net的IP地址。本地域名服務(wù)器向權(quán)限域名服務(wù)器dns.csdn.net進行查詢。權(quán)限域名服務(wù)器dns.csdn.net告訴本地域名服務(wù)器,所查詢的主機www.csdn.net的IP地址。本地域名服務(wù)器最后把結(jié)果告訴主機。
第三步 :瀏覽器與目標(biāo)服務(wù)器建立TCP連接
1. 主機瀏覽器通過DNS解析得到了目標(biāo)服務(wù)器的IP地址后,與服務(wù)器建立TCP連接。
2. TCP3次握手連接:瀏覽器所在的客戶機向服務(wù)器發(fā)出連接請求報文(SYN標(biāo)志為1);服務(wù)器接收報文后,同意建立連接,向客戶機發(fā)出確認(rèn)報文(SYN,ACK標(biāo)志位均為1);客戶機接收到確認(rèn)報文后,再次向服務(wù)器發(fā)出報文,確認(rèn)已接收到確認(rèn)報文;此處客戶機與服務(wù)器之間的TCP連接建立完成,開始通信。
第四步:瀏覽器通過http協(xié)議發(fā)送請求
瀏覽器向主機發(fā)起一個HTTP-GET方法報文請求。請求中包含訪問的URL,也就是http://www.csdn.com/ ,KeepAlive,長連接,還有User-Agent用戶瀏覽器操作系統(tǒng)信息,編碼等。值得一提的是Accep-Encoding和Cookies項。Accept-Encoding一般采用gzip,壓縮之后傳輸html文件。Cookies如果是首次訪問,會提示服務(wù)器建立用戶緩存信息,如果不是,可以利用Cookies對應(yīng)鍵值,找到相應(yīng)緩存,緩存里面存放著用戶名,密碼和一些用戶設(shè)置項。
第五步:某些服務(wù)會做永久重定向響應(yīng)
對于大型網(wǎng)站存在多個主機站點,了負(fù)載均衡或者導(dǎo)入流量,提高SEO排名,往往不會直接返回請求頁面,而是重定向。返回的狀態(tài)碼就不是200OK,而是301,302以3開頭的重定向碼,瀏覽器在獲取了重定向響應(yīng)后,在響應(yīng)報文中Location項找到重定向地址,瀏覽器重新第一步訪問即可。
重定向的作用:重定向是為了負(fù)載均衡或者導(dǎo)入流量,提高SEO排名。利用一個前端服務(wù)器接受請求,然后負(fù)載到不同的主機上,可以大大提高站點的業(yè)務(wù)并發(fā)處理能力;重定向也可將多個域名的訪問,集中到一個站點;由于baidu.com,www.baidu.com會被搜索引擎認(rèn)為是兩個網(wǎng)站,照成每個的鏈接數(shù)都會減少從而降低排名,永久重定向會將兩個地址關(guān)聯(lián)起來,搜索引擎會認(rèn)為是同一個網(wǎng)站,從而提高排名。
第六步:瀏覽器跟蹤重定向地址
當(dāng)瀏覽器知道了重定向后最終的訪問地址之后,重新發(fā)送一個http請求,發(fā)送內(nèi)容同上。
第七步:服務(wù)器處理請求
服務(wù)器接收到獲取請求,然后處理并返回一個響應(yīng)。
第八步:服務(wù)器發(fā)出一個HTML響應(yīng)
返回狀態(tài)碼200 OK,表示服務(wù)器可以響應(yīng)請求,返回報文,由于在報頭中Content-type為“text/html”,瀏覽器以HTML形式呈現(xiàn),而不是下載文件。
第九步:釋放TCP連接
1. 瀏覽器所在主機向服務(wù)器發(fā)出連接釋放報文,然后停止發(fā)送數(shù)據(jù);
2. 服務(wù)器接收到釋放報文后發(fā)出確認(rèn)報文,然后將服務(wù)器上未傳送完的數(shù)據(jù)發(fā)送完;
3. 服務(wù)器數(shù)據(jù)傳輸完畢后,向客戶機發(fā)送連接釋放報文;
4. 客戶機接收到報文后,發(fā)出確認(rèn),然后等待一段時間后,釋放TCP連接;
第十步:瀏覽器顯示頁面
在瀏覽器沒有完整接受全部HTML文檔時,它就已經(jīng)開始顯示這個頁面了,瀏覽器接收到返回的數(shù)據(jù)包,根據(jù)瀏覽器的渲染機制對相應(yīng)的數(shù)據(jù)進行渲染。渲染后的數(shù)據(jù),進行相應(yīng)的頁面呈現(xiàn)和腳步的交互。
第十一步:瀏覽器發(fā)送獲取嵌入在HTML中的其他內(nèi)容
比如一些樣式文件,圖片url,js文件url等,瀏覽器會通過這些url重新發(fā)送請求,請求過程依然是HTML讀取類似的過程,查詢域名,發(fā)送請求,重定向等。不過這些靜態(tài)文件是可以緩存到瀏覽器中的,有時訪問這些文件不需要通過服務(wù)器,直接從緩存中取。某些網(wǎng)站也會使用第三方CDN進行托管這些靜態(tài)文件。
好了,總結(jié)就這里
聯(lián)系客服