Javascript express.js压缩中间件不工作

Javascript express.js压缩中间件不工作,javascript,node.js,express,gzip,Javascript,Node.js,Express,Gzip,我的应用程序中有以下中间件: app.use(express.favicon(__dirname + '/static/public/images/favicon.ico')); app.use(express.compress()); app.use(express.json()); app.use(express.urlencoded()); app.use(express.cookieParser('SECRET!')); app.use(express.static(__dirname

我的应用程序中有以下中间件:

app.use(express.favicon(__dirname + '/static/public/images/favicon.ico'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.cookieParser('SECRET!'));
app.use(express.static(__dirname + config.static_path, {maxAge: 365 * 86400000}));
app.use(express.session({secret: 'SECRET!'}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
标题示例:


但是静态内容不会压缩。可能是什么问题?

静态内容可能无法压缩的原因有几个:

  • express.compress
    保持最小文件大小阈值;大小低于此阈值(默认值:1024字节)的文件将不会被压缩
  • express.compress
    还维护要压缩的内容类型的白名单;如果您提供的文件的内容类型不在该列表中,它也不会被压缩
要修复:

app.use(express.compress({
  threshold : 0, // or whatever you want the lower threshold to be
  filter    : function(req, res) {
    var ct = res.get('content-type');
    // return `true` for content types that you want to compress,
    // `false` otherwise
    ...
  }
}));

(作为参考,是否使用默认筛选函数)

问题在于重新路由到第80个端口,如:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

感谢@robertklep的帮助

你怎么查的?浏览器通常会自动解压缩它们。压缩请求将设置
内容编码
头。检查他们的标题。@user568109 I检查标题时没有
内容编码
,分析页面速度的谷歌chrome插件建议启用gzip…
compress
在中间件链中必须足够高,以压缩响应,这样favicon就可以不压缩了。您能调整一下并再次检查吗?@user568109我试图将压缩中间件移动到中间件链中的第一位,但没有任何结果changed@Kirill通过标题在那里做什么?您是否代理要表达的请求?如果是这样,你确定
Accept Encoding
头确实被传递了吗?或者代理没有其他干扰吗?我检查jquery.js文件的头(大小超过90kb,内容类型是通过过滤器的application/javascript)@Kirill你说的是jquery.js。如果未缩小,则最新版本的大小约为250Kb。90kb意味着它被压缩了。请参阅@user568109 90K大约是缩小(但不一定是压缩)jQuery的大小。@user568109 robertklep是对的jQuery确实缩小了。。。抱歉没有完整的解释:)这是非常有用的!你是如何解决这个问题的?甚至我也在尝试重新路由到另一个端口。