Что нужно отслеживать с помощью Content-Encoding: gzip

Я создал статический веб-сайт, размещенный в ведре S3. Мои файлы активов (файлы css и js) минимизируются и сжимаются с помощью gzip. Само имя файла равно file_gz.js или file_gz.css и поставляется с заголовком Content-Encoding: gzip.

До сих пор я тестировал веб-сайт на разных браузерах, и он отлично работает. Активы поставляются со сжатыми версиями, и страница не выглядит иначе.

Единственная проблема, которую я вижу, заключается в том, что, поскольку это ведро S3, нет отказоустойчивости, когда клиент (браузер) не поддерживает кодировку gzip. Вместо этого запрос HTTP будет терпеть неудачу, и на странице не будут применены стили или javascript-улучшения.

Кто-нибудь знает какие-либо проблемы, установив Content-Encoding: gzip? Поддерживают ли все браузеры это правильно? Существуют ли какие-либо другие заголовки, которые мне нужно добавить, чтобы сделать эту работу должным образом?

Ответ 1

Современные браузеры поддерживают кодированный контент практически по всем направлениям. Однако небезопасно предполагать, что все пользовательские агенты будут. Проблема с вашей реализацией заключается в том, что она полностью игнорирует встроенный метод HTTP, чтобы избежать этой самой проблемы: согласование контента. У вас есть несколько вариантов:

  • Вы можете продолжать закрывать глаза на проблему и надеяться, что каждый пользовательский агент, который обращается к вашему контенту, сможет расшифровать ваши ресурсы gzip. К сожалению, это почти наверняка не будет; браузеры не являются единственными пользовательскими агентами, и подход "голова в песке" к решению проблем редко является хорошей идеей.

  • Внедрите решение для согласования того, используете ли вы gzipped-ответ, используя заголовок Accept-Encoding. Если клиент вообще не указывает этот заголовок или указывает его, но не упоминает gzip, вы можете быть уверены, что пользователь не сможет декодировать gzip-ответ. В этих случаях вам необходимо отправить несжатую версию.

Включение и отключение согласования содержимого выходит за рамки этого ответа. Вам нужно будет провести некоторое исследование, как разобрать заголовок Accept-Encoding и согласовать кодировку ваших ответов. Обычно кодирование содержимого выполняется с использованием сторонних модулей, таких как Apache mod_deflate. Хотя я не знаком с параметрами S3 в этой области, я подозреваю, что вам нужно будет выполнить переговоры самостоятельно.

Вкратце: отправка закодированного содержимого без первой очистки его с клиентом не очень хорошая идея.

Ответ 2

  • У вас CSS/minfied CSS (example.css [247 kb]).
  • Используйте cmd gzip -9 example.css, а скрытый файл будет выглядеть как example.css.gz [44 kb].
  • Переименуйте файл example.css.gz в example.css.
  • Загрузите файл в ведро S3 и в свойствах щелкните метаданные.
  • Добавьте новый тег метаданных, выберите Context-Encoding и значение gzip.
  • Теперь ваш CSS будет уменьшен, а также gzip.

Источник: http://www.rightbrainnetworks.com/blog/serving-compressed-gzipped-static-files-from-amazon-s3-or-cloudfront/