无法使用gzippo设置Cache-Control标头

时间:2014-02-28 09:40:34

标签: node.js express http-headers gzippo

使用gzippo服务器时,我无法设置max-age标头。

用快递测试:

express.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标头?

  • 更重要的是,为什么max-age标头未设置为0,尽管尝试手动设置,并作为gzippo的选项

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

3 个答案:

答案 0 :(得分:1)

  

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

Express会在响应中设置与res.setHeader()不同的API来设置标头。

您应该根据express documentation

使用res.set('HEADER', 'VALUE')
  

更重要的是,尽管如此,为什么max-age标头没有设置为0   试图手动设置,并作为gzippo的一个选项?

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

var maxAge = options.maxAge || 86400000,

因此,如果您将{0}作为maxAge传递,则javascript的评估将为

var maxAge = 0 || 86400000,

因此,maxAge将为86400000!

希望这有帮助,干杯!

答案 1 :(得分:0)

看起来他们有一个名为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(字段,[值])。

答案 2 :(得分:0)

我最后使用.compress()选项

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