Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法使用gzippo设置缓存控制标头_Node.js_Express_Http Headers_Gzippo - Fatal编程技术网

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

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

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