Cache-Control、ETag和过期的Expires

前记

HTTP缓存是web性能优化的一个常识,目的是当你第二次请求时,将JS、CSS、的请求速度加快,可是html却不能设置Cache-Control,这是为何,能够想想html

Cache-Control

如何用

response.setHeader('Cache-Control','max-age=315360000')

响应设置响应头,max-age是设置缓存停留时间,单位为秒,从你接收到那个响应开始计时,通常是设置10年或者1年web

功能

设置Cache-Control能够在一段时间内不访问服务器,直接用本地内存或者硬盘中获取响应,所以极大的加快了访问速度,关键在于不会发送HTTP请求算法

更新资源

当缓存那么久,那若是缓存资源更新了怎么办缓存

  • 能够添加查询参数,如?v=...这样就能够更新缓存了
  • 还有就是能够在入口html文件处把url变一下,和之前的都不同,也能够更新缓存
  • 还有就是在文件名前面生成一串字符,变动文件名,也能够更新缓存

ETag

说到ETag就不得不提md5摘要算法,这个算法能够计算一个文件,而后生成一串字符,相同文件内容生成的字符串是同样的,若是内容不相同生成的字符串就会不同,而且内容差异越小,字符串差异越大性能优化

如何用

response.setHeader('ETag', fileMd5)

fileMd5就是md5生成的字符串服务器

功能

设置了ETag后,之后每次访问服务器都要设置头If-None-Match来带上那串字符串,资源未变动,服务器就会返回304,和Cache-Control不一样就是,ETag仍是会请求,不过资源不变的话,响应体是空的。性能

更新资源

这就很是简单了,当服务器更换了一个资源,那生成的字符串就会不同,当If-None-Match带着原来的字符串来比较时,发现字符串不同,那就会下载新的资源优化

过期的Expires

Expires也是一个响应头,功能和Cache-Control差很少,可是如今逐渐被淘汰了,而且若是在Cache-Control响应头设置了 "max-age" 或者 "s-max-age" 指令,那么Expires头会被忽略。
究其缘由是由于Expires也是设置时间来作期限,可是它设置的是到期时间,而且要是GMT格式的时间,最致命的是它的到期时间是依据系统时间来看的,若是系统时间错误超过了Expires的到期时间,那么就会请求不到资源。url

相关文章
相关标签/搜索