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