分享个人 Full-Stack JavaScript 项目开发经验
在查看搜索引擎的网页快照时候,我们偶尔会看到一些什么样式都没有的网页快照,这是为什么呢?
目前流行的前端打包工具都可以配置使 javascript、css、图片等静态资源文件名中包含哈希值,使资源更新时可以强制浏览器请求改变后的资源。这样的处理方式,只要合理分包,每次可以尽量少的更新下载修改后的资源,也可以放心的通过 Expires 等响应头设置长期的客户端缓存时间了。
正是由于使用了哈希值文件名资源的原因,当服务器端资源发生更新时,网页快照中依然保留着旧的哈希值资源地址,所以导致无法找到 css 等资源,最后显示为没有样式的网页快照。
虽然对于搜索引擎来说,这并不会有什么影响,它主要识别的是你的代码和内容,但这会影响搜索者的体验。
若使用传统的 Expires、Last-Modified、Etag 等缓存相关响应头,亦会有一些弊端。例如,如果还没超过缓存有效时间则不利于客户端及时更新服务器资源,又或者服务器在计算实体标签时带来了额外的开销。
搜索引擎可能会隔一段比较长的时间才会再次抓取你的网页快照。为了不影响快照页面的美观,可以将已经过期的样式文件在资源服务器上保留一段时间。
使用哈希文件名资源的方式,服务器就没必要再使用 Etag 了,可以将它禁用。Nginx 中禁用 Etag 的配置如下:
http {
# http, server, location
etag off;
}