快取、cookie、session的區別
自己的一些理解,如有問題歡迎指出
1、快取
快取分為倆種,強快取和協商快取
強快取:直接從本地快取中取資源,不會和伺服器通訊(由Expire和cache-control控制且後者優先順序高於前者)
Expire:快取過期的時間
cache-control:設定快取
max-age=**,表示**ms之後可以使用快取
no-cache:禁止使用強快取;
no-store:禁止使用快取;
private:只允許背終端使用者訪問;
public:可以被所有使用者訪問
協商快取:通過伺服器來告知是否使用快取
配置:格式(響應頭、請求頭)Last-Modifed/If-Modifed-since和Etag/if-None-match(後者優先於前者)
Last-Modifed/If-Modifed-since:第一次請求的響應中顯示最後修改資源的時間,第二次請求的時候會在請求頭帶上
If-Modifed-since(值為第一次請求對應的響應 Last-Modifed的值),若返回狀態status為403說明沒有改變;
Etag/if-None-match:伺服器會根據請求的資源生成一個Etag,只要發生變化,這個標誌位就會改變,瀏覽器傳送請求的時候會發送if-None-match(值為上一次請求的響應Etag的值),伺服器根據傳上來值對比來決定是否使用快取;
2、cookie
cookie是客戶端記錄儲存使用者身份資訊;
當用戶第一次請求伺服器時,伺服器會返回一個cookie,客戶端收到後就儲存在本地,下次再發送請求的時候會再請求中帶上這個cookie,伺服器通過此來區分使用者的狀態;
cookie失效:
預設值為-1,表示關閉瀏覽器就會失效
值為0:立即失效,不儲存cookie;
3、session:
session實在伺服器記錄使用者的資訊的;
工作流程:當用戶第一次請求伺服器時,伺服器會生成一個sessionId來區分不同的使用者,並儲存在伺服器,在響應的時候放在cookie中,當同一個使用者再次訪問伺服器時,在請求頭會帶上sessionID,伺服器通過sessionId就可以判斷使用者的狀態了,sessionId是可以設定失效時間的;
總結:
1、三者之前的區別
快取與cookie、session的區別
快取:只是對靜態資源的處理;
cookie與session是為了確保通訊過程的有狀態性(http為無狀態協議,無法判斷使用者請求之間的區別:詳情檢視另外一篇)
cookie與session的區別與聯絡:
區別: cookie是儲存在客戶端的,而session是儲存在伺服器的;
聯絡:sessionId的返回依賴於cookie