在瀏覽器地址欄按回車、F五、Ctrl+F5刷新網頁的區別

很多同窗問,不都是刷新嗎?還有什麼區別?其實,仍是有的。html

其中,在地址欄按回車又分爲兩種狀況。一是請求的URI在瀏覽器緩存中未過時,此時,使用Firefox的firebug插件在瀏覽器裏顯示的HTTP請求消息頭以下:瀏覽器

Host 192.168.3.174:8080緩存

User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0服務器

Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8網絡

Accept-Language zh-cn,zh;q=0.5app

Accept-Encoding gzip, deflate插件

Accept-Charset GB2312,utf-8;q=0.7,*;q=0.7xml

Connection keep-alivehtm

HTTP返回狀態顯示200 OK,可是,後臺Nginx服務器的access.log並無找到該請求的記錄,說明請求並無真正提交到HTTP服務器。而是被瀏覽器發現緩存中還有未過時的文件,直接把請求攔截了,firebug裏面顯示所謂的「請求頭消息」、「響應頭消息」都是瀏覽器「僞造」的。這種刷新,使用的網絡流量是最小的,能夠說徹底沒有,時間消耗也是最少的。就像你找到一盒沒有過時的牛奶,以爲確定沒有問題,誰都沒告訴就喝了。ip

二是請求的URI在瀏覽器緩存中已過時,此時,firebug顯示的HTTP請求消息頭以下:

Host 192.168.3.174:8080

User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0

Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language zh-cn,zh;q=0.5

Accept-Encoding gzip, deflate

Accept-Charset GB2312,utf-8;q=0.7,*;q=0.7

Connection keep-alive

If-Modified-Since Mon, 04 Jul 2011 10:12:40 GMT

多了一行If-Modified-Since,後臺Nginx服務器的access.log也找到了該請求的記錄,說明瀏覽器對這種狀況的處理方法是:再問一下服務器,請求的URI在某個時間以後有沒有被修改過,而這個時間是由上次HTTP響應的Last-Modified決定的。服務器鑑定以後,沒有修改的話,返回304 Not Modified,瀏覽器收到後,從緩存裏讀出內容;有修改的話,返回200 OK,並返回新的內容。這種狀況,就像你找到一盒已通過期的牛奶,因而問別人,還能不能喝,若是別人說能夠,你就把它喝了,若是別人說不行,那你得就另外找一盒新鮮的牛奶。

至於F5刷新,其HTTP請求消息頭以下:

Host 192.168.3.174:8080

User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0

Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language zh-cn,zh;q=0.5

Accept-Encoding gzip, deflate

Accept-Charset GB2312,utf-8;q=0.7,*;q=0.7

Connection keep-alive

If-Modified-Since Mon, 04 Jul 2011 10:12:40 GMT

Cache-Control max-age=0

又多了一行Cache-Control: max-age=0,意思是說,我無論瀏覽器緩存中的文件過時沒有,都去服務器詢問一下,至關於上次HTTP響應的Expires暫時失效。服務器的響應處理流程同上。這種狀況,就像你找到一盒牛奶,沒有看它的有效期,直接就問別人能不能喝。

最後是Ctrl+F5刷新,其HTTP請求消息頭以下:

Host 192.168.3.174:8080

User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0

Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language zh-cn,zh;q=0.5

Accept-Encoding gzip, deflate

Accept-Charset GB2312,utf-8;q=0.7,*;q=0.7

Connection keep-alive

Pragma no-cache

Cache-Control no-cache

If-Modified-Since沒有了,Cache-Control換成了no-cache,此外Pragma行是爲了兼容HTTP1.0,做用與Cache-Control: no-cache是同樣的。意思是,我不要緩存中的文件了,強制刷新,直接到服務器上從新下載,因而服務器的響應處理與首次請求這個URI同樣,返回200 OK和新的內容。這種刷新,使用的網絡流量是最大的,也是最耗時的。這就像你雖然發現了一盒牛奶,可是把它扔掉了,直接去買一盒新的。

相關文章
相關標籤/搜索