缺省协议
/缺省协议的使用,代表资源访问的协议和当前页面保持一致,如果页面是http,//就代表http,如果页面是http,也是如此。许多cdn也是如此,
//是缺省协议的写法
//jb51.net/css/
缺省协议的优缺点
本地调试时候,协议为文件协议(file://);
这样这个文件就不存在;
浏览器的缓存
为了节省网络资源的加速浏览,浏览器在用户磁盘对最近请求过的文档进行存储,再次请求这个页面,浏览器在本地读取,加速网页阅览。
缓存好处
- 缓解服务器的压力
- 提升性能
- 减少带宽消耗
缓存策略
- 强缓存:客户端访问服务器某资源,服务器给客户端请求的资源,告诉客户端将这个资源保存在本地,未来在使用这个资源就从本地获取,不需要向服务器请求。
- 协商缓存:客户端向服务器获取资源,服务器给客户端资源同时也给了客户端一些信息,客户端在下一次需要这个资源时候,将请求和信息发给服务器,由服务器判断客户端是否需要更新资源,不更新,返回客户端304,更新就把资源发给它。
(1)理解cache-control所控制的缓存策略
(2)理解last-modified 和etag 以及整个服务端的缓存流程
cache-control
cache 储存,藏吴
cintrol 控制
缓存控制之意,用它的api去控制缓存的时间大小属性
可以出现在response和request中,都可以出现
max-age
max-age=3150000;
设置最大缓存时间;在这个时间不去向服务端发起请求;
最大时间max-age优先级大于expires
s-maxage
s-maxage=315000;
设置之后,如果返回304,适用于cdn;
高于max-age;适用于public;所以去304到cdn拿去资源
private:私人资源
public:公共资源
no-cache: 搭配max-age=0 使用,不管文件有没有缓存过期,都要去服务端请求
no-store: 不适用缓存。
expires
缓存过期时间,指定服务器资源到期时间,优先级低于max-age;
在response heads 中,expires 是http1.0中的属性,之后cache-control(http1.1)出现,高于expires;
expires和cache-control 是强缓存,不会和浏览器协商,强行写入last-Modified/ If-Modeified-Since是协商缓存
last-Modified/ If-Modeified-Since
response header(获得时间)
last-modified: 时间
request header (发送时间)
if-modified-since: 时间在这个时间段内可以使用缓存
last-modified 缺点
1:服务端可能无法获取精确时间
2:文件修改时间,内容没变,也会出现问题
etag/ if-none-match
既然last-modified有如此多的缺点,所以现在一般使用etag;
etag需要和cache-control一起使用
这样last-modified的缺点就解决了;如何hash改变就请求资源,如果不变就使用缓存
response Headers
etag: hash哈希值
request headers
if-none-match : hash哈希值
分级缓存策略
200状态-->当浏览器没有缓存或者刷新页面,浏览器请求服务器数据
304状态-->这一层由last-modified/etag控制
200 from cache --> expires和cache-control控制