HTTP-сжатие

редактировать

HTTP-сжатие - это возможность, которая может быть встроена в веб-серверы и веб-клиенты для повышения скорости передачи и использования полосы пропускания.

Данные HTTP сжимаются перед отправкой с сервера: совместимые браузеры сообщат, какие методы поддерживается на сервер перед загрузкой в ​​правильном формате; браузеры, не поддерживающие соответствующий метод сжатия, будут загружать несжатые данные. Наиболее распространенные схемы сжатия включают gzip и Deflate ; однако полный список доступных схем поддерживается IANA. Кроме того, третьи стороны разрабатывают новые методы и включают их в свои продукты, например схему сжатия общего словаря Google для HTTP (SDCH), реализованную в браузере Google Chrome и используемую на серверах Google..

Есть два разных способа сжатия в HTTP. На более низком уровне поле заголовка Transfer-Encoding может указывать на то, что полезная нагрузка сообщения HTTP сжата. На более высоком уровне поле заголовка Content-Encoding может указывать на то, что ресурс, который передается, кэшируется или используется иным образом, сжат. Сжатие с использованием Content-Encoding поддерживается более широко, чем Transfer-Encoding, и некоторые браузеры не рекламируют поддержку сжатия Transfer-Encoding, чтобы избежать появления ошибок на серверах.

Содержание
  • 1 Согласование схемы сжатия
  • 2 Content- Токены кодирования
  • 3 Серверы, поддерживающие сжатие HTTP
  • 4 Проблемы, препятствующие использованию сжатия HTTP
  • 5 Последствия для безопасности
  • 6 Ссылки
  • 7 Внешние ссылки
Согласование схемы сжатия

В большинстве случаев, за исключением SDCH, согласование выполняется в два этапа, описанных в RFC 2616 :

1. Веб-клиент объявляет, какие схемы сжатия он поддерживает, включая список токенов в HTTP-запрос. Для Content-Encoding список в поле под названием Accept-Encoding; для передачи-кодирования это поле называется TE.

GET / encrypted-area HTTP / 1.1 Host: www.example.com Accept-Encoding: gzip, deflate

2. Если сервер поддерживает одну или несколько схем сжатия, исходящие данные могут быть сжаты одним или несколькими методами, поддерживаемыми обеими сторонами. Если это так, сервер добавит поле Content-Encoding или Transfer-Encoding в HTTP-ответ с используемыми схемами, разделенными запятыми.

HTTP / 1.1 200 OK Дата: пн, 26 июня 2016 22:38:34 GMT Сервер: Apache / 1.3.3.7 (Unix) (Red-Hat / Linux) Последнее изменение: среда, 8 января 2003 г., 23:11 : 55 GMT Диапазон допустимых значений: байты Длина содержимого: 438 Соединение: закрыть Тип содержимого: текст / html; charset = UTF-8 Content-Encoding: gzip

Веб-сервер никоим образом не обязан использовать какой-либо метод сжатия - это зависит от внутренних настроек веб-сервера, а также может зависеть от внутренних архитектура рассматриваемого веб-сайта.

В случае SDCH также требуется согласование словаря, что может включать дополнительные шаги, такие как загрузка правильного словаря с внешнего сервера.

токены кодирования содержимого

Официальный список токенов, доступных для серверов и клиентов, поддерживается IANA и включает:

  • br - Brotli, сжатие алгоритм, специально разработанный для кодирования содержимого HTTP, определенный в RFC 7932 и реализованный в Mozilla Firefox версии 44 и Chromium версии 50
  • compress - программный метод "сжатия" UNIX (исторический; не рекомендуется в большинстве приложений и заменен на gzip или deflate)
  • deflate - сжатие на основе алгоритма deflate (описанного в RFC 1951 ), сочетание LZ77 алгоритм и кодирование Хаффмана, заключенные в формат данных zlib (RFC 1950 );
  • exi - W3C Efficient XML Interchange
  • gzip - zip-формат GNU (описан в RFC 1952 ). Использует алгоритм deflate для сжатия, но формат данных и алгоритм контрольной суммы отличаются от кодирования содержимого deflate. Этот метод наиболее широко поддерживается на Март 2011.
  • идент. tity - преобразование не используется. Это значение по умолчанию для кодирования содержимого.
  • pack200-gzip - формат сетевой передачи для архивов Java
  • zstd - сжатие Zstandard, определенное в RFC 8478

В дополнение к этому ряд неофициальных или нестандартизованных токенов используются в дикой природе либо серверами, либо клиентами:

  • bzip2 - сжатие на основе бесплатного формата bzip2, поддерживаемого lighttpd
  • lzma - сжатие на основе (raw) LZMA доступно в Opera 20 и в elinks через параметр времени компиляции
  • peerdist - Microsoft Peer Content Caching and Retrieval
  • rsync - дельта-кодирование в HTTP, реализованное парой прокси-серверов rproxy.
  • sdch - Сжатие общего словаря Google для HTTP на основе VCDIFF (RFC 3284 )
  • xpress - протокол сжатия Microsoft, используемый Windows 8 и более поздними версиями для обновлений приложений Магазина Windows. Сжатие на основе LZ77, возможно с использованием кодировки Хаффмана.
  • xz - Сжатие содержимого на основе LZMA2, поддерживаемое не -официальный Патч Firefox; и полностью реализован в mget с 31 декабря 2013 г.
Серверы, поддерживающие сжатие HTTP
  • SAP NetWeaver
  • Microsoft IIS : встроенный или использующий сторонний модуль
  • HTTP-сервер Apache, через mod_deflate (несмотря на свое название, поддерживает только gzip)
  • HTTP-сервер Hiawatha : обслуживает предварительно сжатые файлы
  • HTTP-сервер Cherokee Сжатие на лету gzip и deflate
  • Oracle iPlanet Web Server
  • Zeus Web Server
  • lighttpd, через mod_compress и более новый mod_deflate (1.4. 42+)
  • nginx - встроенные
  • Приложения на основе Tornado, если "compress_response" установлен в True в настройках приложения (для версий до 4.0, установите для gzip значение True)
  • Jetty Server - встроенный в службу статического содержимого по умолчанию и доступный через конфигурации фильтров сервлетов
  • GeoServer
  • Apache Tomcat
  • IBM Websphere
  • AOLserver
  • Ruby Rack через промежуточное ПО Rack :: Deflater
  • HAProxy
  • Varnish - встроенный. Также работает с ESI
  • Armeria - обслуживание предварительно сжатых файлов

. Сжатие в HTTP также может быть достигнуто с помощью функциональности серверных сценариев языков, таких как PHP или языки программирования, такие как Java.

Проблемы, препятствующие использованию сжатия HTTP

В статье 2009 года инженеров Google Арвинда Джейна и Джейсона Глазго говорится, что более 99 человеко-лет ежедневно тратится впустую из-за увеличения времени загрузки страницы, когда пользователи не получают сжатый контент. Это происходит, когда антивирусное программное обеспечение мешает соединениям, чтобы заставить их быть распакованными, когда используются прокси (с чрезмерно осторожными веб-браузерами), когда серверы настроены неправильно и когда ошибки браузера не позволяют использовать сжатие. Internet Explorer 6, который переходит на HTTP 1.0 (без таких функций, как сжатие или конвейерная обработка), когда за прокси-сервером - обычная конфигурация в корпоративных средах - был основным браузером, наиболее склонным к отказу от несжатого HTTP.

Другая проблема обнаруженное при крупномасштабном развертывании HTTP-сжатия, связано с определением кодировки deflate : в то время как HTTP 1.1 определяет кодировку deflate как данные, сжатые с deflate (RFC 1951 ) внутри потока, отформатированного в zlib (RFC 1950 ), серверные и клиентские продукты Microsoft исторически реализовывали его как «необработанный» сжатый поток, что делало его развертывание ненадежным. По этой причине некоторые программы, включая HTTP-сервер Apache, реализуют только кодировку gzip .

Последствия для безопасности

Сжатие позволяет выполнить атаку по выбранному открытому тексту : если злоумышленник может внедрить любой выбранный контент на страницу, он может узнать, есть ли на странице содержит заданный ими контент, наблюдая за увеличением размера зашифрованного потока. Если увеличение меньше, чем ожидалось для случайных инъекций, это означает, что компрессор обнаружил повторение в тексте, т. Е. Введенный контент перекрывает секретную информацию. Это идея CRIME.

В 2012 году была объявлена ​​общая атака на использование сжатия данных под названием CRIME. Хотя атака CRIME могла эффективно работать против большого количества протоколов, включая, помимо прочего, TLS, и протоколы прикладного уровня, такие как SPDY или HTTP, были продемонстрированы эксплойты только против TLS и SPDY, и в браузерах и серверах они в значительной степени смягчены. Эксплойт CRIME против HTTP-сжатия вообще не был устранен, хотя авторы CRIME предупредили, что эта уязвимость может быть даже более распространенной, чем сжатие SPDY и TLS вместе взятые.

В 2013 году был опубликован новый пример CRIME-атаки на HTTP-сжатие, получивший название BREACH. Атака BREACH может извлекать токены входа, адреса электронной почты или другую конфиденциальную информацию из зашифрованного TLS веб-трафика всего за 30 секунд (в зависимости от количества байтов, которые нужно извлечь), при условии, что злоумышленник обманом заставляет жертву перейти по вредоносной веб-ссылке. Все версии TLS и SSL подвержены риску BREACH независимо от используемого алгоритма шифрования или шифра. В отличие от предыдущих экземпляров CRIME, от которых можно успешно защититься, отключив сжатие TLS или сжатие заголовков SPDY, BREACH использует сжатие HTTP, которое невозможно отключить, поскольку практически все веб-серверы полагаются на него для улучшения данных. скорость передачи данных для пользователей.

По состоянию на 2016 год атака TIME и атака HEIST теперь известны общественности.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-22 09:52:15
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте