Сжимает ли express сжатое ПО промежуточного слоя запрос или ответ? - PullRequest
1 голос
/ 06 мая 2020

Per express документ сжатия:

При использовании этого модуля с express или подключении, просто приложите. Используйте модуль на любой высоте. Запросы, которые проходят через промежуточное программное обеспечение, будут сжиматься.

var compression = require('compression')
var express = require('express')

var app = express()

// compress all responses
app.use(compression())

Понимание express потока промежуточного программного обеспечения, я не понимаю, что на самом деле сжимается. В документе говорится, что все запросы будут сжаты, но в комментарии сказано: «сжать все ответы».

Было бы разумно сжать ответ, который отправляется клиенту. Если это сжимает ответ, как его можно поставить «как можно выше», как указано в документе?

Ответы [ 3 ]

1 голос
/ 06 мая 2020

"Промежуточное ПО будет пытаться сжимать тела ответов для всех запросов, которые проходят через промежуточное ПО, на основе заданных параметров.

Это промежуточное ПО никогда не будет сжимать ответы, содержащие заголовок Cache-Control с no- transform, так как сжатие преобразует тело ".

source: https://github.com/expressjs/compression

1 голос
/ 07 июля 2020

Сжатие промежуточное ПО сжимает тела ответов для всех заданных запросов, которые проходят через промежуточное ПО. По промежуточного слоя не сжимает ответы, содержащие заголовок Cache-Control, с помощью директив no-transform. Это потому, что это преобразует тело.

Понимая express поток промежуточного программного обеспечения, я не понимаю, что на самом деле сжимается. В документе говорится, что все запросы будут сжаты, но в комментарии сказано: «сжать все ответы».

Это заблуждение. На самом деле промежуточное ПО сжатия сжимает тело ответа для всех заданных запросов, проходящих через промежуточное ПО. Он не сжимает запросы, а сжимает тело ответа, которое сервер отправляет клиенту.

В зависимости от потока промежуточного программного обеспечения промежуточное ПО сжатия должно быть размещено в самом начале конфигурации приложения expressjs , так что он предшествует другим промежуточным программам и маршрутам. Это необходимо для того, чтобы ваш запрос сначала прошел через промежуточное программное обеспечение и сжимал тело ответа до того, как ваш ответ будет отправлен.

1 голос
/ 06 мая 2020

Это промежуточное программное обеспечение работает, беря на себя все способы записи в поток response, такие как res.end(), res.write(), и c .., а затем сжимает данные, которые вы отправляете этими методами, прежде чем они пойдут. по сети. Прелесть открытого исходного кода в том, что вы можете просто go посмотреть исходный самостоятельно и увидеть, что именно он делает.

Итак, он сжимает ответ, который ваш сервер отправляет клиенту. . «Ставить как можно выше» означает, что для данного ответа он будет сжимать только ответы, отправленные ПОСЛЕ того, как это промежуточное ПО запускается для этого запроса.

Итак, если у вас был обработчик запросов или промежуточное программное обеспечение, которое отправляло ответ обратно клиенту, и этот обработчик запроса или промежуточное программное обеспечение выполнялись (в этом конкретном c запросе) до запуска этого compression промежуточного программного обеспечения, тогда ПО промежуточного слоя compression еще не подключено и не сможет выполнить сжатие по этому запросу. Таким образом, вы бы поместили это промежуточное ПО перед любым другим промежуточным ПО или обработчиками запросов, которые вы хотите, чтобы отправляемый ими ответ был сжат. Он перехватывает каждый входящий запрос. Поэтому вы должны убедиться, что он подключился, прежде чем отправлять ответ. В противном случае ваш ответ будет отправлен до того, как будет задействовано сжатие (и ваш ответ не будет сжат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...