Ответ 1
Современные браузеры поддерживают кодированный контент практически по всем направлениям. Однако небезопасно предполагать, что все пользовательские агенты будут. Проблема с вашей реализацией заключается в том, что она полностью игнорирует встроенный метод HTTP, чтобы избежать этой самой проблемы: согласование контента. У вас есть несколько вариантов:
-
Вы можете продолжать закрывать глаза на проблему и надеяться, что каждый пользовательский агент, который обращается к вашему контенту, сможет расшифровать ваши ресурсы gzip. К сожалению, это почти наверняка не будет; браузеры не являются единственными пользовательскими агентами, и подход "голова в песке" к решению проблем редко является хорошей идеей.
-
Внедрите решение для согласования того, используете ли вы gzipped-ответ, используя заголовок
Accept-Encoding
. Если клиент вообще не указывает этот заголовок или указывает его, но не упоминает gzip, вы можете быть уверены, что пользователь не сможет декодировать gzip-ответ. В этих случаях вам необходимо отправить несжатую версию.
Включение и отключение согласования содержимого выходит за рамки этого ответа. Вам нужно будет провести некоторое исследование, как разобрать заголовок Accept-Encoding
и согласовать кодировку ваших ответов. Обычно кодирование содержимого выполняется с использованием сторонних модулей, таких как Apache mod_deflate. Хотя я не знаком с параметрами S3 в этой области, я подозреваю, что вам нужно будет выполнить переговоры самостоятельно.
Вкратце: отправка закодированного содержимого без первой очистки его с клиентом не очень хорошая идея.