如何在Express/Node.js中为静态gzip文件添加标头?

4

我有一些文件,是从Unity构建中得到的,但我无法添加标头。它们的扩展名为jsgz、memgz和datagz。它们位于我的NodeJs项目的公共文件夹中。我正在使用Express 4,并已设置压缩,但我认为这仅压缩了现有的传输文件,而不处理已经压缩的文件。我尝试使用app.get添加标头,但似乎没有起作用:

app.get('/blah/unitymodels/Release/widget.js', function(req, res, next) {
  ... Check ['accept-encoding'] ...
  if (acceptsGzip) {
      var gzippedPath = req.url + 'gz';
      res.sendFile(gzippedPath, {
          root: './public',
          headers: {
              'Content-Encoding': 'gzip',
              'Content-Type': 'application/javascript'
          }
  }
...

我已经尝试过以下两种设置头部的方式,一种是使用res.set,另一种是先设置头部然后让next()调用来处理响应。但是每当我收到文件时,它只是一个gzip文件而没有额外的头部信息,浏览器无法理解。我尝试了其他添加头部信息的方法(如'wibble'、'x-timestamp'等),因此我认为有其他东西正在拦截这些特定的头部信息。我该如何返回这些压缩文件以便浏览器能够理解它们呢?


我想我已经自己解决了这个问题。我使用了express.static来修改头文件,这很好用。然后我在上面的app.get函数中使用了setHeaders,这似乎也可以工作。希望现在已经解决了。 - Matt_JD
你能再详细解释一下静态变量 @Matt_JD 吗? - Gokul Kathirvel
1个回答

2

您可以将express-static-gzip用作Express中间件,如下所示:

/* here serves gzipped static files */
app.use('/my_static/zipped/', expressStaticGzip('my_static/zipped/', {
    customCompressions: [{
        encodingName: "gzip",
        fileExtension: "gz"
    }]
}));

/* here serves other static files */
app.use('/my_static', express.static('my_static'));

这将为每个文件设置内容编码头为“gzip”。如何仅为扩展名为“gz”的文件设置它? - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接