Сжатие промежуточного программного обеспечения express.js не работает
В моем приложении есть следующие посредники:
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);
пример заголовков:
![jquery.js headers]()
Но статический контент не сжимается. В чем может быть проблема?
Ответы
Ответ 1
Существует несколько причин, по которым ваш статический контент не может быть сжат:
-
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
...
}
}));
(в качестве ссылки this > используется функция фильтра по умолчанию)
Ответ 2
Проблема заключалась в перенаправлении на 80-й порт, например:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Спасибо @robertklep за помощь!