【原】web開發常見的storage、cache


打開chrome開發者工具application,我們可以清楚的看到storage包含以下內容:

什么是cookie?

  • cookie一般是由服務器用Set-Cookie 頭給客戶端一串字符串
  • 客戶端每次訪問相同域名的網頁時,必須帶上這段字符串
  • 客戶端要在一段時間內保存這個Cookie
  • Cookie 默認在用戶關閉頁面后就失效,后台代碼可以任意設置 Cookie 的過期時間
  • cookie存放於硬盤,通常大小為4KB
  • 前端最好不要讀寫cookie
  • 用戶可以人為修改cookie

什么是session?

  • 正是因為用戶可以修改cookie,所以誕生出session,它是基於cookie的.
  • session是服務器上的一塊內存(hash表),保存了所有session
  • session將 SessionID(隨機數)通過 Cookie 發給客戶端.客戶端訪問服務器時,服務器讀取 SessionID
  • 服務器再通過 SessionID 可以得到對應用戶的隱私信息,如 id、email

什么是localstorage?

  • LocalStorage 跟 HTTP 無關
  • HTTP 不會帶上 LocalStorage 的值
  • 只有相同域名的頁面才能互相讀取 LocalStorage(沒有同源那么嚴格)
  • 每個域名 localStorage 存儲量一般為 5M
  • 常用場景:記錄有沒有提示過用戶(沒有用的信息,不能記錄密碼)
  • LocalStorage 永久有效,除非用戶清理緩存

什么是sessionstorage?

  • sessionstorage是會話存儲,跟localstorage功能相似,區別在於關閉瀏覽器窗口隨即清除
  • sessionstorage與session無關.

什么是cache-control?

  • cache-control通常用於優化網頁性能,適當使用可減少重復讀取相同內容
  • 可以在服務端setHeader設置cache-control
  • 可以設置讓該字段存於緩存中,瀏覽器下次訪問時不發起請求,直接從緩存中讀取該資源,比如我們的CDN的樣式/腳本/圖片就經常使用到

什么是IndexedDB?

  • Indexed DB 的操作是異步的,不會阻塞主線程的執行,可以在 window、web workers、service workers 環境中使用。
  • IndexedDB 是基於文件存儲的,API 較為復雜,包含 v1 v2 的差異,建議通過類庫來使用,比如:Dexie.js。

什么是ETag?

  • ETag通常用於優化網頁性能,適當使用可減少重復讀取相同內容
  • 可通過服務端setHeader設置etag為相應的字段的md5值
  • 瀏覽器訪問時,request.headers會帶有if-none-match屬性(為上述MD5),若不等於則說明服務器上的
    該資源與本地存儲的該資源不相同,需要重新從服務器加載;若相等則說明兩者資源相同,則直接從本地
    緩存獲取.后端應設置statusCode=304.與cache-control不同的是:etag始終都要發請求和收響應,而
    cache-control不發請求.

Cookie、localStorage、sessionStorage區別

  • 存儲大小:Cookie4K,Storage5M
  • 有效期:Cookie擁有有效期,Storage永久存儲
  • Cookie會發送到服務器端,存儲在內存中,Storage只能存儲在瀏覽器
  • 路徑:Cookie有路徑限制,Storage只存儲在域名下
  • API:Cookie沒有特定的API,Storage有對應的API

VUEX數據存儲在哪里?

  • 存放於內存
  • 存儲大小沒有限制

 

參考文章

https://segmentfault.com/a/1190000038309852

https://www.jianshu.com/p/109ffcb0aca5

https://zhuanlan.zhihu.com/p/373190925

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM