我在使用 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);