http header中与缓存有关的关键属性

Etag:倾向于资源是否变更
Last-modified: 倾向于时间状态的变更。
cache-control:[public、private、no-store、max-page]
优先级高于其他一切设置,若有与之抵触的设置,一律覆盖掉。
public:资源被客户端和代理服务器缓存
private:资源被客户端缓存,代理服务器不会缓存。
no-store:请求和响应都不缓存。
max-age:缓存资源,但是在指定的时间后缓存过期。
浏览器请求首部字段

强缓存
强缓存下,浏览器不会向服务器发生请求,而是直接读取缓存。
如可以在浏览器下看到的from disk cache/from memory cache。对于一般的请求,若是存在该资源的缓存,并且在cache-control:max-age或者expires没有过期,就会命中强缓存。
协商缓存
在缓存过期后,继续请求该资源,需要重新验证缓存资源是否有效,采取的做法一般有两种(Etag比last-modified-value优先级高):
- 比较Etag和if-none-match:根据response header中的etag,浏览器向request header中添加if-none-match字段,服务器拿到请求后,将if-none-match的值与资源的Etag值进行比较,若相同则用协商缓存,返回304响应。
- 比较last-modified_value和if-modified-since:根据response header中的last-modified_value,浏览器向request header中添加if-modified-since字段,服务器拿到请求后,将if-modified-since的值与资源的last-modified的值进行比较,若相同则用协商缓存,返回304响应。
缓存策略
1. 缓存存储策略
cache-control:private,响应数据会被缓存到客户端
2. 缓存过期策略
3. 缓存对比策略
last-modified:浏览器会携带该值去服务器比对,对比成功会返回304,服务器提示浏览器从本地加载数据;若是对比失败会返回200,则服务器会返回响应请求数据,客户端收到数据展示并刷新本地缓存。
http://www.cnblogs.com/vajoy/p/5341664.html
js实现缓存
EventUtil.addHandler(applicationCache, "updateready", function() { applicationCache.swapCche(); })
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176783.html原文链接:https://javaforall.net
