Сжатие промежуточного программного обеспечения 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 за помощь!