使用Firebase主机+;云跑。我应该在express服务器上设置'compression()'?

使用Firebase主机+;云跑。我应该在express服务器上设置'compression()'?,firebase,express,gzip,firebase-hosting,google-cloud-run,Firebase,Express,Gzip,Firebase Hosting,Google Cloud Run,我有一个SPA(sing page应用程序),内置React+Firebase 这就是流程: firebase.json 将所有内容重写到我的云运行express服务器 我在Firebase主机上有一个已连接的自定义域:www.example.com 在Firebase托管中,我们可以看到Firebase托管通过CDN提供内容,默认情况下启用了gzip 考虑到这一事实,它是否让send打开我的express服务器上的压缩在云上运行 例如: const app = express();

我有一个SPA(sing page应用程序),内置React+Firebase

这就是流程:

firebase.json

  • 所有内容重写到我的云运行
    express
    服务器
  • 我在Firebase主机上有一个已连接的自定义域:
    www.example.com
在Firebase托管中,我们可以看到Firebase托管通过CDN提供内容,默认情况下启用了
gzip

考虑到这一事实,它是否让send打开
我的
express
服务器上的压缩在云上运行

例如:

const app = express();      // INITIALIZE EXPRESS APP

const publicFolder = path.resolve(__dirname,"../public");

app.use(compression());
app.use(express.static(publicFolder));

我猜这是有道理的,因为Firebase托管将数据从托管CDN的
压缩到用户
,而我的
express
服务器将数据从
云运行压缩到托管CDN
,这对吗?

根据文档所说,静态内容自动缓存在CDN上,并以正确的压缩方式提供给用户。但是,默认情况下,由后端代码(云函数或云运行)处理的请求不会缓存在CDN上,因为它是动态的

不要通过应用程序设置压缩,而是通过设置
缓存控制
并将缓存标记为
公共
来配置动态内容的缓存。缓存后端内容后,Firebase主机将根据用户可以处理的内容(gzip或Brotli)对其进行压缩

例如:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');
注意:只能缓存GET和HEAD请求。使用其他方法的HTTPS请求永远不会被缓存



查看更多信息。

您的意思是,如果我没有通过CDN缓存,我就不会进行CDN压缩?但是“不可缓存”的响应也会通过CDN传递,不是吗?CDN就是这样工作的,通过存储缓存内容并将其交付给用户。其他CDN不会自动压缩响应,但是,您可以使用诸如gzip之类的编码来提供压缩的响应。如果由于您发送的请求的类型,您的响应无法缓存,那么您可以通过后端代码配置压缩和其他优化。
res.set('Cache-Control', 'public, max-age=300, s-maxage=600');