標籤:工具 exp 訪問 book 靜態 font pat 發送 ati
感冒了超級不舒服,最近有點過度焦慮了,認真再看看這篇經典文章,翻譯如下,以此靜心!
1、 瀏覽器地址欄輸入網址
2、 瀏覽器尋找網域名稱對應的IP地址;DNS網域名稱解析系統按照如下順序進行尋找:
2.1 瀏覽器緩衝;有時瀏覽器會短暫的緩衝DNS尋找記錄,作業系統並不會告訴瀏覽器每個DNS記錄的存留時間,所以瀏覽器在固定的時間緩衝他們 (不同瀏覽器之間,2 - 30分鐘);
2.2 作業系統緩衝;瀏覽器緩衝中尋找無果的情況下,瀏覽器會進行一個系統調用,gethostbyname的函數,作業系統有自身的緩衝。
2.3 路由器緩衝;
2.4 DNS伺服器上的ISP緩衝;具體指網路服務供應商給網頁批量訪問加速的一種解決方案,將當期訪問量比較大的網頁放在緩衝中,從而提高訪問速度,ISP緩衝主要以緩衝靜態頁面為主,如新浪的新聞頁;
2.5 遞迴搜尋;ISP的DNS伺服器開始遞迴搜尋,從根命名伺服器,通過com頂級命名伺服器,直到Facebook的命名伺服器(假設請求的url地址是:Facebook.com)。
3、 瀏覽器發送http請求到web伺服器
以下面這個請求為例:
GET http://facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: facebook.com
Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
Get請求定義了要請求的url地址,瀏覽器也通過User-Agent表明了身份,具體是通過什麼瀏覽器訪問的。Accept 和 Accept-Encoding 也聲明了接收的類型,Connection要求標頭的設定告訴伺服器保持tcp串連。還有一些記錄了登陸使用者的帳號密碼或其他使用者佈建的資訊的cookies也會隨每一次的請求一併發送到伺服器。在最佳化網站時,可以通過fiddle或firebug等工具進行這些詳細資料的查看。
注意:在URL http://facebook.com/末尾的斜杠也是非常重要的,該請求瀏覽器可以直接添加末尾斜杠,但是譬如http://example.com/folderOrFile,瀏覽器就不能在末尾自動的加一個斜杠,因為folderOrFile是目錄還是檔案不太確定,在這樣的情況下,瀏覽器請求的時候不帶斜杠,伺服器將響應一個重新導向,從而導致不必要的往返。
4、 facebook 的伺服器響應一個301永久重新導向的狀態代碼,告知瀏覽器去訪問“http://www.facebook.com/” 而不是 “http://facebook.com/”。
伺服器不直接響應的原因有:一個是搜尋引擎排名,二是多個內容相同的url在緩衝方面並不友好。
5、 瀏覽器重新導向
6、 伺服器處理請求;
這可能看起來像一個簡單的任務,但事實上,這裡發生了很多有趣的事情,即便是一個簡單的部落格網站,更不用說在大規模可伸縮的像facebook這樣的網站上。
比如說資料的儲存,分區,夜間資料更新等。
7、 伺服器返回一個200的html請求;Content-Encoding告知瀏覽器響應主體部分通過gzip進行了壓縮。
8、 瀏覽器開始渲染html;
9、 瀏覽器繼續發送嵌在html中的請求。Images,css,js等,每一個地址都要經曆類似於HTML頁面請求的過程,網域名稱的DNS尋找,發送請求URL,遵循重新導向。。。
靜態檔案和動態網頁不同,可以在瀏覽器中進行緩衝,有些檔案直接從緩衝中得到,並沒有經過伺服器,瀏覽器通過解讀包含Expires回應標頭設定的檔案知道如何去緩衝特定的檔案,同時,每個響應一般都會有一個ETag(類似於版本號碼),如果瀏覽器看到一個已經存在相同ETag的檔案,會立即中斷該條請求的通訊線路。
訪問量比較大的網站會設定CDN,緩衝一些靜態資源,實現負載平衡。
10、瀏覽器發送非同步ajax請求。
本文參考:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/
What really happens when you navigate to a URL