Firebase 当您的应用程序';s服务器托管在不同的云服务上
我已经在长期缓存我的静态资产,如:css、图像、js文件等。由于这些文件在我的构建过程中都会得到内容哈希ID,因此我对它们的缓存方式如下:Firebase 当您的应用程序';s服务器托管在不同的云服务上,firebase,caching,cdn,firebase-hosting,google-cloud-run,Firebase,Caching,Cdn,Firebase Hosting,Google Cloud Run,我已经在长期缓存我的静态资产,如:css、图像、js文件等。由于这些文件在我的构建过程中都会得到内容哈希ID,因此我对它们的缓存方式如下: // STATIC FILES LIKE IMAGES, FONTS, CSS AND JS Cache-Control: "public,max-age=31536000" 通过这种方式,我可以获得长达一年的客户机和CDN缓存,这非常好。很好用 但是我的web应用程序是一个单页的React应用程序,因此每当我更新它时,我的用户从我的
// STATIC FILES LIKE IMAGES, FONTS, CSS AND JS
Cache-Control: "public,max-age=31536000"
通过这种方式,我可以获得长达一年的客户机和CDN缓存,这非常好。很好用
但是我的web应用程序是一个单页的React应用程序,因此每当我更新它时,我的用户从我的应用程序中获得的唯一index.html
文件就会自动变得过时和无用,因为它指向旧的静态JS文件,这些文件现在都已更新
所以基本上我不能让他们得到一个过时的index.html
,不管怎样
我还希望从该文件的CDN缓存中获得好处。这就是它可能变得棘手的时候
现在,为了安全起见,我正在做:
// For index.html
Cache-Control: "no-cache, no-store, must-revalidate"
我想把它改成:
// FOR index.html
Cache-Control: "max-age=0, s-maxage=86400, must-revalidate"
这样我就可以得到一个1天的CDN缓存,这很好。但是我仍然不想冒险提供过时的index.html
下面是关于它的说明:
任何请求的静态内容都会自动缓存在CDN上。如果重新部署站点内容,Firebase Hosting会自动清除CDN中所有缓存的静态内容,直到下一个请求
但问题是我的服务器托管在云上运行。Firebase主机基本上会重写对它的每个请求。比如:
firebase.json
"rewrites": [
{
"source": "**",
"run": {
"serviceId": "server",
"region": "uscentral-1"
}
}
]
所以,每当我更新我的应用程序时,我都会将其重新部署到Cloud Run,但我不会运行新的firebase部署——只运行hosting
命令。因为在云运行代码的新部署之间,我的firebase.json
文件中没有任何更改
问题 在这种情况下添加
s-maxage=86400
头是否安全
假设新的云上部署运行不会触发CDN缓存的清除。我能做些什么来触发它吗?像一些firebase部署——只托管:clearcdn
命令
因为即使我再次运行
firebase deploy--only hosting
,我也不确定缓存的文件是否会被清除,因为我的firebase hosting/public
文件夹始终是一个空文件夹。因此Firebase主机可能会“感觉”没有任何变化。经过一天的测试,以下是结果:
如果您设置允许共享(CDN)缓存的缓存控制
头,如公共
或无缓存
,您的响应将在客户端浏览器和CDN缓存上都缓存
- 当您重新部署到云运行时,它会自动清除您的CDN缓存吗?
Firebase部署--仅托管。这将使CDN清除所有缓存文件,新请求将立即开始获取新数据
- 我不确定缓存文件是否会被清除,因为我的Firebase主机/公用文件夹始终是空文件夹。因此Firebase主机可能会“感觉”什么都没有改变。
即使您的Firebase Hostingpublic
文件夹中没有任何更改(在我的情况下,它是一个空文件夹),并且您的Firebase.json
中没有任何更改,它仍将创建一个新的Firebase Hosting版本,并将从CDN中清除您的缓存文件,如所述:
任何请求的静态内容都会自动缓存在CDN上。如果重新部署站点内容,Firebase Hosting会自动清除CDN中所有缓存的静态内容,直到下一个请求
关注动态内容
例如,如果您有动态内容,您将通过管理员UI进行编辑。请注意,CDN缓存将保留该内容的过时缓存,直到过期
例如:CDN缓存/blog/一些帖子
,其中s-maxage为1天
。即使您动态更改了帖子的内容,CDN也会将CDN保留一整天,直到过期并再次收到请求为止