HTTP缓存
HTTP的缓存对于web的性能是有很大提升的,在客户端请求服务器时会查询是否有对应的缓存数据,如果没有,则需要请求服务器;如果有,则将数据存储至浏览器的缓存中。
其有两种缓存规则
第一种Expires
在进行响应时可以在响应头中来标注需要进行缓存(HTTP1.0中使用的是Expires,HTTP1.1中使用的是Cache-Control),在使用Expires时,其值为数据的到期时间,在进行下一次请求时,如果请求时间小于服务端返回的到期时间,则直接使用缓存数据;
在使用Cache-Control时,Cache-Control常见的取值有
- private 客户端可以缓存,默认值
- public 客户端和代理服务器都可以缓存
- max-age=xx 缓存的内容将在xx秒后失效
- no-cache 不使用该缓存规则
- no-store 所有内容都不会缓存,第二种缓存规则也不会生效
示例:Cache-Control: no-cache, no-store, max-age=0, must-revalidate
在HTTP1.0中,使用Expires来判断资源的refresh或stale
在HTTP1.1中,在1.0的基础上增加了一些cache的新特性,当缓存对象的Age超过Expires时会变成stale对象
第二种If-Modified-Since
该种缓存规则是需要进行判断Last-Modified / If-Modified-Since来判断是否可用缓存,即浏览器第一次请求数据时,服务器会返回数据,且在响应头中包含有Last-Modified,值为最后修改时间,ETag为该资源的唯一标识(当文件修改之后ETag也会修改),之后在进行请求服务器时,浏览器会在请求头中添加If-Modified-Since,值为响应头中对应的Last-Modified的值,服务器在收到请求头包含If-Modified-Since的请求会进行判断该资源是否被修改,如果修改时间大于If-Modified-Since,则表示资源被修改过,会进行数据加载,并返回状态码200;如果修改时间小于If-Modified-Since,则表示资源没被修改过,则响应状态吗为304,此时浏览器会继续使用上次保存的缓存