Node.js 无法使用gzippo设置缓存控制标头
我在使用gzippo服务器时设置最大年龄标头时遇到问题 使用express进行测试: express.js:Node.js 无法使用gzippo设置缓存控制标头,node.js,express,http-headers,gzippo,Node.js,Express,Http Headers,Gzippo,我在使用gzippo服务器时设置最大年龄标头时遇到问题 使用express进行测试: 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 connec
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)
node gzippo.js
# go to localhost:8090/test.html
标题为:
Cache-Control:public, max-age=0
no foo header
使用gzippo进行测试:
gzip.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 express.js
# go to localhost:8090/test.html (just come static html file)
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')
,max age在我的响应头中保持604800
我的问题是:
- 为什么我的express.js服务器中没有设置foo头
- 更重要的是,尽管尝试手动设置,但为什么max age header没有设置为0,并且作为gzippo的一个选项
gzip文档:看起来他们有一个名为
set()的包装器
别名为res.header(字段,[value])。我最后使用了带有.compress()选项的express
为什么我的express.js服务器中没有设置foo头
Express公开了一个不同于res.setHeader()
的API,用于在响应中设置头
您应该使用res.set('HEADER','VALUE')
根据
更重要的是,尽管如此,为什么“最大年龄”标题未设置为0
是否尝试手动设置它,并将其作为gzippo的一个选项
因此,我研究了gizippo的代码,它在初始化时执行以下操作:
var maxAge=options.maxAge|86400000,
因此,如果将0作为maxAge
传递,javascript的计算结果将是
var maxAge=0 | | 86400000,
因此,最大年龄将为86400000
希望这有帮助,干杯 谢谢。但是如果我尝试,例如:res.set({'Cache-Control':'max age=0'})代码>在应用程序中。使用,它不会更改标题。如果我尝试这样设置“内容类型”,服务器将永远不会响应。我遗漏了什么吗?在不使用对象语法的情况下试试,比如res.set(foo,bar)
而不是res.set({foo:bar})
我试过了。在chrome响应头中,我仍然有缓存控制:public,max age=604800
(在chrome开发工具中禁用缓存后的事件,或匿名模式)。但是使用curl-I
,我看到了缓存控制:max age=0