利用cookie 測試瀏覽器的緩存機制

利用是否去請求時,至少response header是會存在請求不請求的區別

這樣的話,如果去請求的時候,就帶上返回新的cookie

然後和老的cookie比較

如果是跟新了,說明,沒有去讀cache,而是發送請求了


例子測試頁面:

<html>

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<script src="http://10.1.146.174/case/js/jquery.js" type="text/javascript"></script>
		<script src="http://10.1.146.174/case/js/browsertool.js" type="text/javascript"></script>
		<script src="http://10.1.146.174/case/js/assert.js" type="text/javascript"></script>
		<script src="http://10.1.146.174/case/JS/BlueFairyCTS.js" type="text/javascript"></script>
		<script src="http://10.1.146.174/case/JS/BlueFairyCTS_Report.js" type="text/javascript"></script
	</head>

	<body>
		<a>response is max-age=10, so when request this url in the new window in 10 seconds, browser should not send request to server, but local cache</a>
		<iframe id="testpage" src="http://10.1.146.174/service/cachecontrol.py?method=maxage" height="100%" width="100%">
			
		</iframe>
		<script type="text/javascript">
		$("#testpage").load(function(){
			var ckie = getcookie('time');
			if(ckie==''){
				setCookie('time', '2', false, false, false, false); //differce between 2 times,
				setTimeout("window.open('http://10.1.146.174/case/front/cache/testcache011-maxage-newwindow.html', '_blank');",2000);
				var rs = new CloseBrowser("","",5,null);
				rs.Call();
				//setTimeout("document.execCommand('Refresh');",2000);
			}else if(ckie=='2'){
				var content = parent.frames['testpage'].document.body.innerText;
				assertEquals('maxage1 ',content,'expect the content is maxage1,if request,the server will return maxage2');
				var ckie1 = getcookie('maxage')
				assertNotEquals('2',ckie1,'if not request server , the cookie should still be 1');
				var casename = "testcachemaxage011";
				var casetype = "CACHE";
				var description = "test browser open a new window to request this url when server return cache-control: no-cache, and browser will request the server and load new resource";
				delcookie('time');
				var debugInfo = ListToStr(ASSERTLIST);
				var add = new AddTestResult("",casetype,casename,RESULT,description,debugInfo,null);
				add.Call();
				var rs = new CloseBrowser("","",5,null);
				rs.Call();
			}
		});
		</script>
	</body>

</html>


服務器(用python cgi 實現的,其實我認爲用jsp之類可以直接在頁面內嵌代碼的方式會更好):

def maxage():
	try:
		if(os.environ.has_key('HTTP_COOKIE')):
			if(os.environ['HTTP_COOKIE'].find('request=first') >= 0):
				logger.info('maxage: has cookie maxage=1')
				ckie = Cookie.SimpleCookie()
				ckie['request']='first'
				ckie['maxage']='2'
				ckie['maxage']['path']='/case'
				print('Status: 200 OK')
				print('Content-Type: text/html')
				print('Cache-Control: max-age=10')
				print(ckie)
				print('')
				print('maxage2')
				return
		logger.info('maxage: has no cookie')
		ckie = Cookie.SimpleCookie()
		ckie['request']='first'
		ckie['maxage']='1'
		ckie['maxage']['path']='/case'
		print('Status: 200 OK')
		print('Content-Type: text/html')
		print('Cache-Control: max-age=10')
		print(ckie)
		print('')
		print('maxage1')
		return
	except:
		logger.error(sys.exc_info())
		return httplib.error()




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章