无法使用 gzippo 设置缓存控制标头



我在使用 gzippo 服务器时无法设置最大年龄标头。

快速测试:

快递.js:

var express = require('express');
var app = express();
app.configure(function () {
  app.use(function (req, res, next) {
    res.setHeader('foo', 'bar');
    return next();
  });
});
var connect = require('connect');
connect.createServer(
  connect.static("" + __dirname + "/dist")
).listen(8090);

然后我做:

node express.js
# go to localhost:8090/test.html (just come static html file)

标头为:

Cache-Control:public, max-age=0 
no foo header

使用 gzippo 进行测试:

gzippo.js

var gzippo = require('gzippo');
var express = require('express');
var app = express();
app.configure(function () {
  app.use(function (req, res, next) {
    res.setHeader('foo', 'bar');
    return next();
  });
});
app.use(express.logger('dev'));
app.use(gzippo.staticGzip("" + __dirname + "/dist", {maxAge: 0, clientMaxAge: 0}), {maxAge: 0, clientMaxAge: 0});
app.listen(8090);

然后我做:

node gzippo.js
# go to localhost:8090/test.html

标头为:

foo:bar
Cache-Control:public, max-age=604800

如果我在设置 foo 后尝试设置 res.setHeader('Cache-Control', 'max-age=0'),则响应标头中的最大年龄保持 604800。


我的问题是:

  • 为什么我的 express.js 服务器中没有设置 foo 标头?

  • 更重要的是,为什么最大年龄标头未设置为 0,尽管尝试手动设置它,并作为 gzippo 的一个选项

Gzippo doc: https://github.com/tomgco/gzippo

为什么我的 express.js 服务器中没有设置 foo 标头?

Express 公开的 API 与用于在响应中设置标头的 res.setHeader() 不同。

您应该根据快速文档使用res.set('HEADER', 'VALUE')

更重要的是,为什么最大年龄标头未设置为 0,尽管 尝试手动设置它,并作为 gzippo 的一个选项?

所以我研究了 gizippo 的代码,它在初始化时执行以下操作:

var maxAge = options.maxAge || 86400000,

所以如果你传递 0 作为 maxAge ,javascript 的评估将是

var maxAge = 0 || 86400000,

因此,maxAge 将是 86400000!

希望这有帮助,干杯!

看起来他们有一个名为 set() 的包装器

res.set('Content-Type', 'text/plain');
res.set({
  'Content-Type': 'text/plain',
  'Content-Length': '123',
  'ETag': '12345'
})

http://expressjs.com/api.html

别名为 res.header(field, [value])。

我最终使用 express 和 .compress() 选项

var express = require('express');
var app = express();
var modRewrite = require('connect-modrewrite');
//var fs = require('fs');
app.configure(function () {
  app.use(modRewrite([
    '!(\..+)$ / [L]'
  ]));
});
app.use(express.compress());
app.use(express.logger('dev'));
var oneMinuteInMs = 60000;
// maxAge is 0 if you don't specify it
app.use(express.static("" + __dirname + "/dist", { maxAge: oneMinuteInMs })); 
app.listen(8080);

最新更新