1、http缓存分类:
根据是否需要重新向服务器发起请求分类,可以分为(强制缓存、协商缓存)
根据单个或多个用户是否可用进行分类,可以分为“专用缓存、共享缓存”
如果启用了强制缓存,则不需要与服务进行交互,但无论是否启用协商缓存,都需要与服务端进行交互。
以下是强制缓存与协商缓存的比较。
1.1、强制缓存
如果缓存数据未过期,也就是说,缓存控制中的max-age未失效,强制缓存将使用浏览器中的缓存数据,而不会向服务器发送请求。
优点:如果启用强制缓存,则http状态代码为200。 这种方式页面加载速度最快,性能也很好
缺点:但是,在此期间,如果服务器端资源发生更改,则在页面上不可用。 因为不会向服务器发送请求。
响应头缓存控制,常见设置为max-agepublicprivateno-cache no-store等
强缓存总结cache-control: max-age=xxxx,public
客户端和代理服务器都可以缓存资源。
客户端在xxx秒的有效期内,如果有请求资源的需要,则直接读取缓存,statu code:200在用户进行了刷新操作时,向服务器发出http请求
cache-control: max-age=xxxx,保密
只允许客户端缓存资源; 不缓存代理服务器
客户端在xxx秒内直接读取缓存,并在statu code:200
cache-control: max-age=xxxx,immutable
客户机在xxx秒的有效期内,如果有请求资源的需要,则直接读取缓存,statu code:200即使用户进行刷新操作,也不向服务器发出http请求
cache-control: no-cache
跳过强大的缓存设置,但不阻止协商缓存设置; 一般来说,如果进行了强缓存,则只有在强缓存被禁用后才能进入协商缓存,设置为no-cache时缓存不会变强,每次请求时都会返回到服务端进行查询。
Cache-control :否- store
如果不缓存,这将不再与客户端、服务器一起缓存。 所谓的强缓存、协商缓存也没有了。
二、协商缓存上述强缓存通过对资源设置有效期,客户端每次请求资源时看是否过期; 过期后才咨询服务器。 所以,强大的缓存是为了让客户端自给自足。 如果有一天客户端在请求资源时发现它已经过期,这就是请求服务器。 此时,请求服务器的进程可以设置协商缓存。 此时,协商缓存必须在客户端和服务器的两端进行交换。
如何设置协商缓存?
响应头中的设置
etag : ' 5c 20 abbd-e2e8' last-modified : mon, 24 Dec 2018 09:49:49 GMT协商缓存步骤总结:在下次请求返回响应头etag和最后修改时,在请求头中具有这两个步骤服务端会比较你带来的标识,判断资源是否发生了变化,如果发生了变化,会直接更新新资源和对应的响应头的标识etag、last-modified。 如果资源未更改,则etag、last-modified不会更改
请求资源时,将用户本地资源的etag同时带到服务端,并与服务端比较最新的资源。
资源没更改,返回304
如果是资源有更改,返回200,则返回最新资源。
作为补充,当客户端向服务端重新发送请求时,响应头etag、last-modified会在请求头中重命名密钥。
//responseheaderetag : ' 5c 20 abbd-e2e8' last-modified : mon, 24 dec 201809336049336049 GMT//请求头是if-none-matched 3360 ' 5c 20 abbd-e2e8' if-modified-since 3360 mon,24例如这些文件是怎么设置的呢? 核心需求是
毫无疑问,我们需要缓存
发送新包时,请不要加载旧的缓存资源
采用3358www.Sina.com/,index.html文件,保证资源更新。 原因是每次用户都希望index.html直接向服务器请求,而没有浏览器缓存。 http://www.Sina!
ng>其他资源采用强缓存 + 协商缓存可以看到很多网站都是这么干的
参考:
https://www.jianshu.com/p/9c95db596df5
https://www.jianshu.com/p/227cee9c8d15
不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等操作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。
Session和Cookie的区别 从存储方式上比较Cookie只能存储字符串,如果要存储非ASCII字符串还要对其编码。
Session可以存储任何类型的数据,可以把Session看成是一个容器
从隐私安全上比较Cookie存储在浏览器中,对客户端是可见的。信息容易泄露出去。如果使用Cookie,最好将Cookie加密
Session存储在服务器上,对客户端是透明的。不存在敏感信息泄露问题。
从有效期上比较Cookie保存在硬盘中,只需要设置maxAge属性为比较大的正整数,即使关闭浏览器,Cookie还是存在的
Session的保存在服务器中,设置maxInactiveInterval属性值来确定Session的有效期。如果关闭了浏览器,该Session虽然没有从服务器中消亡,但也就失效了。
从对服务器的负担比较Session是保存在服务器的,每个用户都会产生一个Session,如果是并发访问的用户非常多,是不能使用Session的,Session会消耗大量的内存。
Cookie是保存在客户端的。不占用服务器的资源。像baidu、Sina这样的大型网站,一般都是使用Cookie来进行会话跟踪。
从浏览器的支持上比较如果浏览器禁用了Cookie,那么Cookie是无用的了!
如果浏览器禁用了Cookie,Session可以通过URL地址重写来进行会话跟踪。