1. 程式人生 > >瀏覽器快取cookie與伺服器快取

瀏覽器快取cookie與伺服器快取

之前對快取都是一知半解的,都是基於理論之上沒有正整實際動手驗證過,今天抽時間終於把快取重新理了一片

1、 設定js 、css緩

      http頭部中設定expires,Cache-Control(具體怎麼設定這裡就不細說),IIS伺服器上設定過期時間

2、瀏覽器中如何設定快取document.cookie,  通過key/value的形式,對快取的操作可參照 

var date =new Date().getTime()+10*24*3600*1000;
    document.cookie="userId=828 ";
    document.cookie="userName="+encodeURIComponent(" 重慶 ")+';'+"expires="+new Date(date).toGMTString();


注意: A、 編碼問題,在cookie的名或值中不能使用分號(;)、逗號(,)、等號(=)以及空格,所有需要編碼,之前的escape()編碼已經過時,推薦encodeURI()

       B、每個expires只是針對當前的cookie 生效,如上面的只針對key為userName的cookie有效

每次傳送請求的時候都會在request頭部加入cookie,如圖:

在js中是無法獲取cookie中expires失效時間,只有通過建立虛擬欄位儲存在cookie中,

3、瀏覽器encodeURI編碼之後的cookie在伺服器中獲取,java.net.URLDecoder.decode()解碼

  request.getCookies(),返回的是一個cookie陣列,

                Cookie [] cookie = request.getCookies();
		for(int i=0;i<cookie.length;i++){
			String key = cookie[i].getName();
			String value = cookie[i].getValue();
			System.out.println(key+" "+java.net.URLDecoder.decode(value,"utf-8"));
		}

4、伺服器設定cookie

伺服器中設定的cookie,也會存在於瀏覽器中,在下次請求的時候也會帶在這個cookie,當然必須在同一域名之下。



圖中第一result存在於 request 中,但它是由於伺服器中設定cookie後存在於每次請求的頭部中,而第二個result存在於response中,它也是來至於伺服器中。