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);
标题示例:
但是静态内容不会压缩。可能是什么问题?静态内容可能无法压缩的原因有几个:
保持最小文件大小阈值;大小低于此阈值(默认值:1024字节)的文件将不会被压缩李>express.compress
还维护要压缩的内容类型的白名单;如果您提供的文件的内容类型不在该列表中,它也不会被压缩李>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确实缩小了。。。抱歉没有完整的解释:)这是非常有用的!你是如何解决这个问题的?甚至我也在尝试重新路由到另一个端口。