当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP、TCP、HTTP等),以及服务器等各种参与对象上由此引发的一系
1.DNS域名解析:瀏覽器緩存、系統(tǒng)緩存、路由器、ISP的DNS服務(wù)器、根域名服務(wù)器。把域名轉(zhuǎn)化成IP地址。 2.與IP地址對(duì)應(yīng)的服務(wù)器建立TCP連接,經(jīng)歷三次握手:SYN,ACK、SYN,ACK 3.以get,post方式發(fā)送HTTP請(qǐng)求,get方式發(fā)送主機(jī),用戶代理,connection屬性,cookie等 4.獲得服務(wù)器的響應(yīng),顯示頁面
首先是查找瀏覽器緩存,瀏覽器會(huì)保存一段時(shí)間你之前訪問過的一些網(wǎng)址的DNS信息,不同瀏覽器保存的時(shí)常不等。
如果沒有找到對(duì)應(yīng)的記錄,這個(gè)時(shí)候?yàn)g覽器會(huì)嘗試調(diào)用系統(tǒng)緩存來繼續(xù)查找這個(gè)網(wǎng)址的對(duì)應(yīng)DNS信息。
如果還是沒找到對(duì)應(yīng)的IP,那么接著會(huì)發(fā)送一個(gè)請(qǐng)求到路由器上,然后路由器在自己的路由器緩存上查找記錄,路由器一般也存有DNS信息。
如果還是沒有,這個(gè)請(qǐng)求就會(huì)被發(fā)送到ISP(注:Internet Service Provider,互聯(lián)網(wǎng)服務(wù)提供商,就是那些拉網(wǎng)線到你家里的運(yùn)營商,中國電信中國移動(dòng)什么的),ISP也會(huì)有相應(yīng)的ISP DNS服務(wù)器,一聽中國電信就知道這個(gè)DNS服務(wù)器的規(guī)模肯定不會(huì)小,所以基本上都能在這里找得到。題外話:會(huì)跑到這里進(jìn)行查詢是因?yàn)槟銢]有改動(dòng)過"網(wǎng)絡(luò)中心"的"ipv4"的DNS地址,萬惡的電信聯(lián)通可以改動(dòng)了這個(gè)DNS服務(wù)器,換句話說他們可以讓你的瀏覽器跳轉(zhuǎn)到他們?cè)O(shè)定的頁面上,這也就是人盡皆知的DNS和HTTP劫持,ISP們還美名曰“免費(fèi)推送服務(wù)”。強(qiáng)烈鄙視這種霸王行為。我們也可以自行修改DNS服務(wù)器來防止DNS被ISP污染。
如果還是沒有的話, 你的ISP的DNS服務(wù)器會(huì)將請(qǐng)求發(fā)向根域名服務(wù)器進(jìn)行搜索。根域名服務(wù)器就是面向全球的頂級(jí)DNS服務(wù)器,共有13臺(tái)邏輯上的服務(wù)器,從A到M命名,真正的實(shí)體服務(wù)器則有幾百臺(tái),分布于全球各大洲。所以這些服務(wù)器有真正完整的DNS數(shù)據(jù)庫。如果到了這里還是找不到域名的對(duì)應(yīng)信息,那只能說明一個(gè)問題:這個(gè)域名本來就不存在,它沒有在網(wǎng)上正式注冊(cè)過。或者賣域名的把它回收掉了(通常是因?yàn)榍焚M(fèi))。
這也就是為什么打開一個(gè)新頁面會(huì)有點(diǎn)慢,因?yàn)楸镜貨]什么緩存,要這樣遞歸地查詢下去。
多說一句,例如"mp3.baidu.com",域名先是解析出這是個(gè).com的域名,然后跑到管理.com域名的服務(wù)器上進(jìn)行進(jìn)一步查詢,然后是.baidu,最后是mp3,
所以域名結(jié)構(gòu)為:三級(jí)域名.二級(jí)域名.一級(jí)域名。
瀏覽器終于得到了IP以后,瀏覽器接著給這個(gè)IP的服務(wù)器發(fā)送了一個(gè)http請(qǐng)求,方式為get,例如訪問nbut.cn
這個(gè)get請(qǐng)求包含了主機(jī)(host)、用戶代理(User-Agent),用戶代理就是自己的瀏覽器,它是你的"代理人",Connection(連接屬性)中的keep-alive表示瀏覽器告訴對(duì)方服務(wù)器在傳輸完現(xiàn)在請(qǐng)求的內(nèi)容后不要斷開連接,不斷開的話下次繼續(xù)連接速度就很快了。其他的顧名思義就行了。還有一個(gè)重點(diǎn)是Cookies,Cookies保存了用戶的登陸信息,在每次向服務(wù)器發(fā)送請(qǐng)求的時(shí)候會(huì)重復(fù)發(fā)送給服務(wù)器。Corome上的F12與Firefox上的firebug(快捷鍵shift+F5)均可查看這些信息。
發(fā)送完請(qǐng)求接下來就是等待回應(yīng)了,如下圖:
當(dāng)然了,服務(wù)器收到瀏覽器的請(qǐng)求以后(其實(shí)是WEB服務(wù)器接收到了這個(gè)請(qǐng)求,WEB服務(wù)器有iis、apache等),它會(huì)解析這個(gè)請(qǐng)求(讀請(qǐng)求頭),然后生成一個(gè)響應(yīng)頭和具體響應(yīng)內(nèi)容。接著服務(wù)器會(huì)傳回來一個(gè)響應(yīng)頭和一個(gè)響應(yīng),響應(yīng)頭告訴了瀏覽器一些必要的信息,例如重要的Status Code,2開頭如200表示一切正常,3開頭表示重定向,4開頭,如404,呵呵。響應(yīng)就是具體的頁面編碼,就是那個(gè)<html>......</html>,瀏覽器先讀了關(guān)于這個(gè)響應(yīng)的說明書(響應(yīng)頭),然后開始解析這個(gè)響應(yīng)并在頁面上顯示出來。在下一次CF的時(shí)候(不是穿越火線,是http://codeforces.com/),由于經(jīng)常難以承受幾千人的同時(shí)訪問,所以CF頁面經(jīng)常會(huì)出現(xiàn)崩潰頁面,到時(shí)候可以點(diǎn)開火狐的firebug或是Chrome的F12看看狀態(tài),不過這時(shí)候一般都急著看題和提交代碼,似乎根本就沒心情理會(huì)這個(gè)狀態(tài)吧-.-。
如果是個(gè)靜態(tài)頁面,那么基本上到這一步就沒了,但是如今的網(wǎng)站幾乎沒有靜態(tài)的了吧,基本全是動(dòng)態(tài)的。所以這時(shí)候事情還沒完,根據(jù)我們的經(jīng)驗(yàn),瀏覽器打開一個(gè)網(wǎng)址的時(shí)候會(huì)慢慢加載這個(gè)頁面,一部分一部分的顯示,直到完全顯示,最后標(biāo)簽欄上的圈圈就不轉(zhuǎn)了。
這是因?yàn)?#xff0c;主頁(index)頁面框架傳送過來以后,瀏覽器還要繼續(xù)向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求的內(nèi)容是主頁里面包含的一些資源,如圖片,視頻,css樣式等等。這些"非靜態(tài)"的東西要一點(diǎn)點(diǎn)地請(qǐng)求過來,所以標(biāo)簽欄轉(zhuǎn)啊轉(zhuǎn),內(nèi)容刷啊刷,最后全部請(qǐng)求并加載好了就終于好了。
需要說明的是,對(duì)于靜態(tài)的頁面內(nèi)容,瀏覽器通常會(huì)進(jìn)行緩存,而對(duì)于動(dòng)態(tài)的內(nèi)容,瀏覽器通常不會(huì)進(jìn)行緩存。緩存的內(nèi)容通常也不會(huì)保存很久,因?yàn)殡y保網(wǎng)站不會(huì)被改動(dòng)。
總結(jié)
以上是生活随笔為你收集整理的当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP、TCP、HTTP等),以及服务器等各种参与对象上由此引发的一系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13 | 线性排序:如何根据年龄给100
- 下一篇: 火狐浏览器常用的几个插件