cookie、session、cache-control等
前言
首先我們來複習一下HTTP的相關知識,關於請求與響應組成部分詳情知識請檢視這:
Chrome客戶端向server發請求request,HTTP是80埠,HTTPS則是443埠。
server會對Chrome客戶端作出響應response
響應頭包括cookie,cache-control。
cookie
- 伺服器通過 Set-Cookie 響應頭給客戶端一串字串
- 伺服器得到 Cookie 後,客戶端每次訪問相同域名的網頁時,必須帶上這段字串
- 客戶端要在一段時間內儲存這個Cookie
- Cookie 是有有效期的,預設在使用者關閉頁面後就失效,後臺程式碼可以任意設定 Cookie 的過期時間
- 大小大概在 4kb 以內
- Cookie 存在的問題在於其可被使用者可以隨意篡改
Session
- 將 SessionID(隨機數)通過 Cookie 發給客戶端
- 客戶端訪問伺服器時,伺服器讀取 SessionID
- 伺服器有一塊記憶體(雜湊表)儲存了所有 session
- 通過 SessionID 我們可以得到對應使用者的隱私資訊,如 id、email
- 這塊記憶體(雜湊表)就是伺服器上的所有 session
LocalStorage
- LocalStorage 跟 HTTP 無關
- HTTP 不會帶上 LocalStorage 的值
- 只有相同域名的頁面才能互相讀取 LocalStorage(沒有同源那麼嚴格)
- 每個域名 localStorage 最大儲存量為 5Mb 左右(每個瀏覽器不一樣)
- 常用場景:記錄有沒有提示過使用者(沒有用的資訊,不能記錄密碼)
- LocalStorage 永久有效,除非使用者清理快取
SessionStorage(會話儲存)
1、2、3、4 同上
- SessionStorage 在使用者關閉頁面(會話結束)後就失效。
Cache-Control
cache-control可以讓瀏覽器在一段時間內不訪問伺服器(使用max-age,如response.setHeader('Cache-Control','max-age=300000000')
),直接用本地的硬碟或記憶體作為響應,這樣能夠節省渲染頁面的時間;當我們更新頁面時,只要更新一下url路徑即可,這樣瀏覽器就不會再使用快取而是去下載最新的版本。
Expires
Expires 的使用方法,如:
response.setHeader('Expires','Sun,04 Feb 2018 14:55:08 GM')
當設定了max-age/s-max-age指令的Cache-Control響應頭時,Expires會被忽略。
Cache-Control和Expires 區別在於?
Cache-Control是設定多久過期的,而Expires則是設定什麼時候過期。我們應該優先使用Cache-Control,因為Expires 設定的過期時間指的是本地時間,而我們不能保證使用者的本地時間是否正確。