瀏覽器快取cookie與伺服器快取
阿新 • • 發佈:2018-12-26
之前對快取都是一知半解的,都是基於理論之上沒有正整實際動手驗證過,今天抽時間終於把快取重新理了一片
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
圖中第一result存在於 request 中,但它是由於伺服器中設定cookie後存在於每次請求的頭部中,而第二個result存在於response中,它也是來至於伺服器中。