免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
F5和CTRL+F5的區(qū)別

F5和CTRL+F5的區(qū)別

背景

我司的網站是框架結構的,一個頁面里有多個iframe.正因為這個原因,每次當我自信滿滿的把修改過的JS文件提交到SVN上后,沒過多久,某個后臺程序員就會來找我說:怎么JS還報錯呢,我已經CTRL+F5了啊,你提交對了嗎.我只好到他座位上拿起鼠標進行操作:右鍵->本幀->在新標簽中打開新幀->CTRL+F5->切換到原標簽->F5.這一番操作之后,終于對了.同樣的事情已經發(fā)生過很多次了.這也證明了不少程序員同志還是不夠了解瀏覽器的緩存機制.

基礎知識

問題的根本原因就是,在火狐里,CTRL+F5清除不了框架頁面的緩存.包括框架頁面本身和其所有的嵌入元素(.js,.css,.jpg等).所以本文的真正標題是"Firefox中如何才能跳過緩存刷新框架內的頁面".首先我要講一下相關的基礎知識.

一.讀取緩存

搞WEB開發(fā)的經常會說:有緩存,CTRL+F5一下.或者:有緩存,CTRL+SHIFT+DEL清一下.那么你知道瀏覽器有幾種方式來讀取緩存文件嗎.從是否發(fā)送了HTTP請求來區(qū)分,我覺的可以分兩種:

1.瀏覽器從服務器返回的過期時間判斷得出,該文件還沒有過期,所以直接從緩存文件夾讀取緩存文件,顯示網頁,并沒有走任何網絡連接.

2.瀏覽器發(fā)送HTTP請求,請求頭中包含了If-Modified-Since 和 If-None-Match字段.讓服務器來判斷是否應該讀取緩存文件.如果服務器返回304響應,無響應實體,表示服務器認為這個文件沒有變化.可以使用緩存中的對應文件,這時瀏覽器才會讀取緩存.(如果不了解HTTP,可以買本<<HTTP權威指南>>看看.或者直接RFC2616)

我把第一種讀取緩存的方式稱之為"無請求讀取緩存",第二種方式稱之為"無修改讀取緩存".

二.刷新方式

這里的刷新方式是指能通過哪些方式讓一個網頁重新加載,我從表現上大概分了三種:

1.最常用的,點擊瀏覽器的刷新按鈕,或者按下F5

2.CTRL+F5,功能是跳過緩存刷新

3.瀏覽器地址欄上回車,IE里把這種請求方式歸為"導航"操作

在讀取緩存方面,這三種刷新方式的表現都不一樣.第三種方式的表現通常是只刷新主頁面文件,其他內嵌文件全部"無請求讀取緩存".大部分開發(fā)者都不會這么刷新頁面,所以本次試驗不對比這種刷新方式.

三.F5和CTRL+F5的區(qū)別

本文的試驗部分只針對F5和CTRL+F5兩種刷新方式做對比.這里講一下為什么F5不能跳過緩存,而后者可以.答案就是發(fā)送的請求頭不一樣.而且不同的瀏覽器發(fā)送的請求頭也有一些區(qū)別.

1.F5觸發(fā)的HTTP請求的請求頭中通常包含了If-Modified-Since 或 If-None-Match字段,或者兩者兼有.如果服務器認為被請求的文件沒有發(fā)生變化,則返回304響應,也就沒有跳過緩存.

2.CTRL+F5觸發(fā)的HTTP請求的請求頭中沒有上面的那兩個頭,卻有Pragma: no-cache 或 Cache-Control: no-cache 字段,或者兩者兼有.服務器看到no-cache這樣的值就會把最新的文件響應過去.也就跳過了緩存.

試驗對比

試驗題目為:使用F5和CTRL+F5在包含iframe的頁面上進行刷新操作,五大瀏覽器各自的表現不同.本次試驗使用Fiddler監(jiān)測網絡請求,而且不考慮緩存相關的HTTP響應頭的影響.

主頁面index.html源碼為

<!DOCTYPE HTML><html>	<head>		<meta charset="utf-8" />	</head>	<body>		<iframe src="frame.html"></iframe>		<img src="index.jpg" />		<script src="index.js"></script>	</body></html>

框架頁面frame.html源碼為

<!DOCTYPE HTML><html>	<head>		<meta charset="utf-8" />	</head>	<body>		<img src="frame.jpg" />		<script src="frame.js"></script>	</body></html>

 

一.IE 9

 

序號1-6的請求為F5的操作,序號7-12的請求為CTRL+F5的操作.可見,在IE下,使用CTRL+F5能讓主頁面和框架頁面的所有資源文件都跳過緩存.

二.Firefox 18

 

序號1-6的請求為F5的操作,序號7-9的請求為CTRL+F5的操作.可見,在Firefox下,使用CTRL+F5只能讓主頁面及其資源文件跳過緩存,而框架頁面及其資源文件完全"無請求讀取緩存".

三.chrome 22

 

序號1-5的請求為F5的操作,序號7-9的請求為CTRL+F5的操作.可見,在Chrome下,和Firefox類似,使用CTRL+F5只能讓主頁面及其資源文件跳過緩存,而框架頁面及其資源文件完全"無請求讀取緩存".詭異的是,如果在當前頁面按過一次CTRL+F5,則每次在該頁面按下F5的時候,主頁面的HTTP請求中都會加入一個Pragma: no-cache請求頭,也就是說,瀏覽器會記憶.序號1的請求就是這種情況.更詭異的是,F5操作下,frame.html始終是"無請求讀取緩存",這和其他瀏覽器表現不一樣.更麻煩的是,chrome不能用右鍵把框架頁面提出來.

四.Opera 12.50

 

序號1-6的請求為F5的操作,序號7-12的請求為CTRL+F5的操作.可見,在Opera下,表現更加不一樣.即使只按F5,主頁面的請求(序號1)也有Pragma: no-cache請求頭,CTRL+F5下,除了框架頁面本身(序號8),所有的資源文件都跳過了緩存.這一點比較接近IE

五.Safari

 

序號1-5的請求為F5的操作,Safari不支持CTRL+F5.和Opera類似.F5會讓主頁面的請求(序號1)中包含Pragma: no-cache請求頭.既然不支持跳過緩存,那么不管是不是框架頁面,在Safari中只能點菜單清除緩存了.

解決辦法

根據以上對比可以看出,只有IE瀏覽器的表現是我們想要的.這里給出Firefox下的解決辦法.

1.安裝擴展 http://files.cnblogs.com/ziyunfei/ReloadPassCache.xpi

2.安裝UC腳本  http://files.cnblogs.com/ziyunfei/ReloadPassCache.uc.js

UC腳本是專業(yè)的火狐玩家使用的,這里順便講一下我是如何實現這個功能的.有興趣玩火狐腳本的可以看一下.實在看不懂可以跳過.

//在瀏覽器主窗口綁定keydown事件location == "chrome://browser/content/browser.xul" && addEventListener("keydown", function (event) {	//如果按下了CTRL+F5	if (event.which === 116 && event.ctrlKey) {	//阻止冒泡和默認操作,主要是阻止默認的刷新動作.否則會刷兩次		event.preventDefault();		event.stopPropagation();		(function (content) {			//為當前標簽綁上DOMContentLoaded事件,在主頁面DOM加載完成后,刷新各個框架			gBrowser.mCurrentBrowser.addEventListener("DOMContentLoaded", function self() {				//解綁DOMContentLoaded事件				this.removeEventListener("DOMContentLoaded", self, false);				//遍歷刷新所有框架				Array.prototype.slice.call(content.frames).forEach(function (win) {					//跳過緩存刷新					win.location.reload(true);				})			}, false);			//開始刷新主頁面			content.location.reload(true);		})(content)	}//捕獲模式,第一時間觸發(fā)事件處理函數.}, true)

安裝該擴展后,按下CTRL+F5能像IE一樣,讓所有的框架頁面全都跳過緩存刷新.至于多層框架(框架中的框架),這個擴展不適用,我覺的各位程序員不會那么倒霉.

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
面試官不講武德,一上來就問我Chrome底層原理和HTTP協(xié)議(萬字長文)
接口測試第七課(cache)
淺談瀏覽器緩存
基于.NET的Web應用框架構建模式
大數據和高并發(fā)的解決方案匯總
WebView性能、體驗分析與優(yōu)化
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服