Cookie
Cookie 是服务器保存在浏览器的一小段文本信息,每个 Cookie 的大小一般不能超过4KB。浏览器每次向服务器发出请求,就会自动附上这段信息。
- 服务器通过
Set-Cookie
头给客户端一串字符串 - 客户端每次访问相同域名的网页时,必须带上这段字符串
- 客户端要在一段时间内保存这个Cookie
- Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间
- 大小大概在 4kb 以内
Session
- 将
SessionID
(随机数)通过 Cookie 发给客户端 - 客户端访问服务器时,服务器读取
SessionID
- 服务器有一块内存(哈希表)保存了所有 session
- 通过
SessionID
我们可以得到对应用户的隐私信息,如 id、email - 这块内存(哈希表)就是服务器上的所有 session
LocalStorage
- LocalStorage 跟 HTTP 无关
- HTTP 不会带上 LocalStorage 的值
- 只有相同域名的页面才能互相读取 LocalStorage(没有同源那么严格)
- 每个域名 localStorage 最大存储量为 5Mb 左右(每个浏览器不一样)
- 常用场景:记录有没有提示过用户(没有用的信息,不能记录密码)
- LocalStorage 永久有效,除非用户清理缓存
SessionStorage
- SessionStorage 跟 HTTP 无关
- HTTP 不会带上 SessionStorage 的值
- 只有相同域名的页面才能互相读取 SessionStorage(没有同源那么严格)
- 每个域名 SessionStorage 最大存储量为 5Mb 左右(每个浏览器不一样)
- SessionStorage在用户关闭页面(结束会话)后就失效
HTTP缓存
Cache-Control
通用消息头被用于在http 请求和响应中通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在请求设置的指令,在响应中不一定包含相同的指令。
设置Cookie过期时间,两种方法
Cache-Control: max-age=<seconds>
多少秒之后,Cookie过期(现在常用)Expires: Wed, 21 Oct 2015 07:28:00 GMT
格林尼治时间xxxx,Cookie过期(以前的用法,现在不常用)
ETag
ETag
HTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。
区别:
- Cache-Control 直接不发请求。
- ETag 要发请求才行。(得到304)