因為最近在面試,所以會更新一些跟面試有關的文章,一點點的去更新,也幫助自己更深層更全面的去理解這些東西吧。
在面試中,最經(jīng)典的一道題就是: “從輸入一個新的網(wǎng)址到用戶完全看到頁面,這期間都發(fā)生了什么?”
至少在我面試的幾家當中,有四家都問我這個問題,當然如果你就單純的以為都是同一個問題的話,那就想的太簡單了..至少在我面試的這四家公司他們都是針對我的回答找了四個不同的點來問我.. 那么我也就不賣關子了,先上正確答案。
1、輸入一個網(wǎng)址:www.itdecent.cn
2、瀏覽器查找域名的IP地址
3、瀏覽器給web服務器發(fā)送一個http請求
4、服務器給瀏覽器響應一個301永久重定向:會訪問“http://www.itdecent.cn/” 而非“http://jianshu.com/”
5、瀏覽器跟蹤重定向地址
6、服務器處理請求,并返回一個HTML響應
7、瀏覽器開始顯示HTML
當然,這只是一個大概的流程,其中的細枝末節(jié)你可以在大致說完這過程之后再具體的說,比如:
1、DNS:是一個域名系統(tǒng),域名是互聯(lián)網(wǎng)上的身份標識,是不可重復的唯一標識資源,DNS解析是互聯(lián)網(wǎng)絕大多數(shù)應用的實際尋址方式
在面試中他問到我這樣一個問題:DNS解析發(fā)生在什么時候?
當用戶輸入域名并敲回車后,系統(tǒng)就會調(diào)用DNS client,尋找到用戶配置或者自動分配的DNS IP,之后就開始整個的解析過程
2、返回一個HTML文件的時候你要考慮這個文件有沒有緩存過,緩存過有沒有變化。
一般靜態(tài)文件會允許瀏覽器對其進行緩存,有的文件可能會不需要與服務器通訊,而從緩存中直接讀取。
緩存有什么好處?這個就比較簡單了,但是也會被問到,你就說 減少相應的延遲,減少網(wǎng)絡帶寬消耗

瀏覽器第一次緩存.png

瀏覽器再次緩存.png
這里也談到了很多專業(yè)的名詞,我這里給大家簡單介紹一下
1、Exprires: Expires是Web服務器響應消息頭字段,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數(shù)據(jù),而無需再次請求。
2、Cache-Control: Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請求到服務器取數(shù)據(jù)。
只不過Cache-Control的選擇更多,設置更細致,如果同時設置的話,其優(yōu)先級高于Expires。
3、Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。
Last-Modified:標示這個響應資源的最后修改時間。
If-Modified-Since:當資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務器請求時帶上頭 If-Modified-Since,表示請求時間。
4、Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。
Etag:web服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識(生成規(guī)則由服務器決定)。
Apache中,ETag的值,默認是對文件的索引節(jié)(INode),大?。⊿ize)和最后修改時間(MTime)進行Hash后得到的。
If-None-Match:當資源過期時(使用Cache-Control標識的max-age),發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match (Etag的值)。
refer:
1、當你輸入一個網(wǎng)址,實際會發(fā)生什么?
http://blog.jobbole.com/33951/
2、瀏覽器 HTTP 協(xié)議緩存機制詳解
https://my.oschina.net/leejun2005/blog/369148