Стандарт Google App Engine не сжимает мое приложение Next.js / Express - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь выяснить, что нужно сделать, чтобы Google App Engine (стандартная версия) применил сжатие к выходным данным моего приложения Next.js / Node.js / Express.

Насколько я понял, проблема в том, что

1) Балансировщик нагрузки Google удаляет все метатеги, указывающие на то, что клиент поддерживает сжатие из запроса, и поэтому app.use(compression()) в server.js ничего не сделает. Я пытался принудительно сжать с помощью функции {filter: shouldCompress}, но, похоже, это не имеет значения, поскольку внешний интерфейс Google все еще возвращает несжатый результат. (Локальное сжатие работает нормально.)

2) Как и когда балансировщик нагрузки Google выбирает сжатие, для меня загадка. (И особенно, почему бы не мое глупое, но большое application/javascsript содержание :)

Вот что они говорят в документах:

Если клиент отправляет заголовки HTTP с указанием исходного запроса что клиент может принимать сжатый (сжатый) контент, App Engine сжимает данные ответа обработчика автоматически и присоединяет соответствующие заголовки ответа. Он использует как Accept-Encoding, так и Заголовки запроса User-Agent, чтобы определить, может ли клиент надежно получать сжатые ответы. Как обрабатываются запросы: сжатие ответов

Так вот. Я хотел бы использовать App Engine для этого проекта, но когда index.js имеет размер 700 КБ вместо сжатых 200 КБ, это своего рода демонстрация.

1 Ответ

0 голосов
/ 01 ноября 2018

Согласно документации Заголовки и ответы для Node.js, заголовок Accept-Encoding удаляется из запроса в целях безопасности.

Примечание : Заголовки объектов (заголовки, относящиеся к телу запроса) не проверяются и не проверяются, поэтому приложения не должны полагаться на них. В частности, заголовок запроса Content-MD5 отправляется в приложение без изменений, поэтому может не совпадать с хешем MD5 содержимого. Кроме того, заголовок запроса Content-Encoding не проверяется сервером, поэтому, если клиент отправляет сжатое тело запроса, оно будет отправлено приложению в сжатом виде.

Также обратите внимание на ответ на Google Group , который гласит:

Сегодня мы не пропускаем заголовок Accept-Encoding, поэтому ваше промежуточное ПО не может решить, что оно должно сжиматься.

Мы выпустим исправление для этого в течение следующих нескольких недель.

...