瀏覽器: F5 和 Ctrl+F5的區(qū)別(兩種強制刷新的不同)
[| 2011/09/30 11:10]
并且學到一點,,原來ctrl+f5還可以強制網(wǎng)絡上的proxy也更新內(nèi)容 http://www.cnblogs.com/cxd4321/archive/2009/03/11/1408425.html Browser: F5 vs Ctrl+F5 在瀏覽器里中,,按F5鍵或者點擊Toobar上的Refresh/Reload圖標(簡稱F5),和做F5同時按住Ctrl鍵(簡稱Ctrl+F5),,效果是明顯不一樣的,通常Ctrl+F5明顯要讓網(wǎng)頁Refresh慢一些,,到底兩者有什么區(qū)別呢,? 在上一篇技術文章中,說到了Expires,、Last-Modified/If-Modified-Since和ETag/If-None-Match這些HTTP Headers,,F(xiàn)5/Ctrl+F5和這些有莫大關系。 假如我第一次訪問過http://www.,,這個網(wǎng)頁是個動態(tài)網(wǎng)頁,,每次訪問都會去訪問Server,但是它包含一個一個靜態(tài)資源 http://www./logo.gif,,瀏覽器在顯示這個網(wǎng)頁之前需要發(fā)HTTP請求獲取這個logo.gif文件,,返回的 HTTP response包含這樣的Headers: Expires: Thu 27 Nov 2008 07:00:00 GMT Last-Modified: Fri 30 Nov 2007 00:00:00 GMT 那么瀏覽器就會cache住這個logo.gif文件,直到2008年11月27日7點整,,或者直到用戶有意清空cache,。 下次我再通過bookmark或者通過在URI輸入欄直接敲字的方法訪問http://www.的時候,瀏覽器一看本地有個 logo.gif,,而且它還沒過期呢,,就不會發(fā)HTTP request給server,而是直接把本地cache中的logo.gif顯示了,。 F5的作用和直接在URI輸入欄中輸入然后回車是不一樣的,,F(xiàn)5會讓瀏覽器無論如何都發(fā)一個HTTP Request給Server,即使先前的Response中有Expires Header。所以,,當我在當前http://www.網(wǎng)頁中按F5的時候,,瀏覽器會發(fā)送一個HTTP Request給Server,但是包含這樣的Headers: If-Modified-Since: Fri 30 Nov 2007 00:00:00 GMT 實際上Server沒有修改這個logo.gif文件,,所以返回一個304 (Not Modified),,這樣的Response很小,所以round-trip耗時不多,,網(wǎng)頁很快就刷新了,。 上面的例子中沒有考慮ETag,如同在上一篇技術文章中所說,,最好就不要用ETag,,但是如果Response中包含ETag,F(xiàn)5引發(fā)的Http Request中也是會包含If-None-Match的,。 那么Ctrl+F5呢,? Ctrl+F5要的是徹底的從Server拿一份新的資源過來,所以不光要發(fā)送HTTP request給Server,,而且這個請求里面連If-Modified-Since/If-None-Match都沒有,,這樣就逼著Server不能 返回304,而是把整個資源原原本本地返回一份,,這樣,,Ctrl+F5引發(fā)的傳輸時間變長了,自然網(wǎng)頁Refresh的也慢一些,。 實際上,,為了保證拿到的是從Server上最新的,Ctrl+F5不只是去掉了If-Modified-Since/If-None-Match,,還需要 添加一些HTTP Headers,。按照HTTP/1.1協(xié)議,Cache不光只是存在Browser終端,,從Browser到Server之間的中間節(jié)點(比如 Proxy)也可能扮演Cache的作用,,為了防止獲得的只是這些中間節(jié)點的Cache,需要告訴他們,,別用自己的Cache敷衍我,,往Upstream 的節(jié)點要一個最新的copy吧。 在IE6中,,Ctrl+F5會添加一個Header Pragma: no-cache 在Firefox 2.0中,,Ctrl+F5會添加兩個 Pragma: no-cache Cache-Control: max-age=0 作用就是讓中間的Cache對這個請求失效,這樣返回的絕對是新鮮的資源 |
|
來自: java_laq小館 > 《div css》