静态资产的Netlify标头缓存控制

Yud*_*nda 4 cache-control http-headers netlify

是否可以仅对图像,字体,css和js等静态资产进行缓存控制?

这是我的解决方法

[[headers]]
  for = "/*" # This defines which paths this specific [[headers]] block will cover.
  [headers.values]
    Cache-Control = "public, max-age=604800"
Run Code Online (Sandbox Code Playgroud)

它很可爱,但是效果不如我预期。即使更新内容,该网站似乎仍使用旧版本。

foo*_*ool 8

您现在已经说过,浏览器应该为访问您网站的任何人将每个文件(包括index.html)缓存一周。因此,您将看到站点的旧副本已经很长时间了。

这可能不是您想要的。更好的方法是创建多个标头规则,每种标头规则一个:

[[headers]]
  for = "*.js" # js files should be set this way
  [headers.values]
    Cache-Control = "public, max-age=604800"
[[headers]]
  for = "*.css" # css files too
  [headers.values]
    Cache-Control = "public, max-age=604800"
Run Code Online (Sandbox Code Playgroud)

但是,您甚至可能不想这样做。Netlify特意将缓存设置为最大使用期限0,但它确实允许缓存内容,并启用原子回滚和部署。这是有关此的详细信息:https : //www.netlify.com/blog/2017/02/23/better-living-through-caching/

  • 实际上,如果您对资产(js,css,图像等)进行指纹识别(如许多捆绑程序(例如webpack)所做的那样),则绝对应该将max-age设置为较大的值,甚至使用“ Cache-Control:不可变”。 (2认同)
  • 我不认为,我知道。我为 netlify 工作并撰写了在我的回复中链接的文章。更具体的原因是,如果您更改文件名而不是内容,浏览器将不必要地重新下载它。我们的缓存处理不介意您是否在某些部署上更改 main.css - 如果有新内容,它将强制进行新下载,如果不是,则不会。与“新文件名,不存在缓存,每次部署后必须下载”不同 (2认同)
  • @TomaNistor该文件不是问题-它是每个其他文件,由于文件名更改而每个文件的校验和都更改,并且文件名中包含该文件。同样-尽管您认为浏览器可能足够聪明,但是实际上,它们不会请求旧文件名,因此它们的缓存查找将不匹配,并且无论如何它们都将重新下载。 (2认同)
  • 请注意,Netlify的方法至少不适用于某些资产。具体来说,当使用网络字体时,会出现“未样式化文本的闪烁”,因为浏览器对字体文件的重新验证花费了太长时间。我为.woff2文件添加了标题,这是一个*更好的体验。整个方案还假设连接良好,连接速度相当快,但是很多人没有连接(特别是在移动设备上)。Netlify的方法对某些人来说是有意义的,但我认为这不是一种适合所有人/每个站点的灵丹妙药。 (2认同)