Jump to content

HTTP-сжатие

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

Данные HTTP сжимаются перед отправкой с сервера: совместимые браузеры сообщают серверу, какие методы поддерживаются, прежде чем загружать правильный формат; браузеры, которые не поддерживают соответствующий метод сжатия, будут загружать несжатые данные. Наиболее распространенные схемы сжатия включают gzip и Brotli ; полный список доступных схем поддерживается IANA . [2]

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

Согласование схемы сжатия

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

Переговоры выполняются в два этапа, описанных в RFC 2616 и RFC 9110:

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

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

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

HTTP/1.1 200 OK
Date: mon, 26 June 2016 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix)  (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip

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

Токены кодирования контента

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

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

  • br — Brotli , алгоритм сжатия, специально разработанный для кодирования HTTP-контента, определенный в RFC 7932 и реализован во всех современных основных браузерах.
  • compress – программный метод «сжатия» UNIX (исторический; устарел в большинстве приложений и заменен на gzip или deflate)
  • deflate – сжатие на основе алгоритма deflate (описано в RFC 1951), a combination of the LZ77 algorithm and Huffman coding, wrapped inside the zlib data format (RFC 1950 );
  • exi – Эффективный обмен XML W3C
  • gzip – zip-формат GNU (описан в RFC 1952 ). Для сжатия используется алгоритм deflate , но формат данных и алгоритм контрольной суммы отличаются от кодирования контента «deflate». Этот метод является наиболее широко поддерживаемым по состоянию на март 2011 года. [5]
  • идентичность – преобразование не используется. Это значение по умолчанию для кодирования контента.
  • package200-gzip — формат сетевой передачи для архивов Java [6]
  • zstd – сжатие Zstandard, определенное в RFC 8478

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

  • bzip2 – сжатие на основе бесплатного формата bzip2, поддерживаемого Lighttpd. [7]
  • lzma — сжатие на основе (необработанного) LZMA доступно в Opera 20 и в elinks через опцию времени компиляции. [8]
  • равноправный [9] – Кэширование и извлечение однорангового контента Microsoft
  • rsync [10] дельта-кодирование в HTTP , реализованное парой rproxy- прокси.
  • xpress — протокол сжатия Microsoft, используемый Windows 8 и более поздними версиями для обновлений приложений Магазина Windows. Сжатие на основе LZ77, опционально с использованием кодировки Хаффмана. [11]
  • xz – сжатие контента на основе LZMA2, поддерживаемое неофициальным патчем Firefox; [12] и полностью реализован в mget с 31 декабря 2013 г. [13]

Серверы, поддерживающие HTTP-сжатие

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

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

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

Существуют различные онлайн-инструменты для проверки работоспособности HTTP-сжатия. Эти онлайн-инструменты обычно запрашивают несколько вариантов URL-адреса, каждый из которых имеет разные заголовки запроса (с различным содержимым Accept-Encoding). HTTP-сжатие считается реализованным правильно, если сервер возвращает документ в сжатом формате. [17] Сравнивая размеры возвращаемых документов, можно рассчитать эффективную степень сжатия (даже между различными алгоритмами сжатия).

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

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

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

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

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

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

Сжатие позволяет выполнить атаку с использованием выбранного открытого текста : если злоумышленник может внедрить любой выбранный контент на страницу, он может узнать, содержит ли страница заданный им контент, наблюдая за увеличением размера зашифрованного потока. Если увеличение меньше, чем ожидалось для случайных внедрений, это означает, что компрессор обнаружил повтор в тексте, т.е. внедренное содержимое перекрывает секретную информацию. Это идея, лежащая в основе ПРЕСТУПЛЕНИЯ.

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

В 2013 году был опубликован новый пример КРИМИНАЛЬНОЙ атаки на сжатие HTTP, получившей название BREACH. Атака BREACH может извлечь токены входа, адреса электронной почты или другую конфиденциальную информацию из зашифрованного TLS веб-трафика всего за 30 секунд (в зависимости от количества извлекаемых байтов), при условии, что злоумышленник обманом заставляет жертву посетить вредоносную веб-ссылку. [22] Все версии TLS и SSL подвержены риску НАРУШЕНИЯ независимо от используемого алгоритма шифрования или шифра. [23] В отличие от предыдущих случаев CRIME , от которых можно успешно защититься, отключив сжатие TLS или сжатие заголовков SPDY, BREACH использует сжатие HTTP, которое невозможно отключить, поскольку практически все веб-серверы используют его для повышения скорости передачи данных для пользователей. [22]

По состоянию на 2016 год атака TIME и атака HEIST стали общеизвестны. [24] [25] [26] [27]

  1. ^ «Использование HTTP-сжатия (IIS 6.0)» . Корпорация Майкрософт . Проверено 9 февраля 2010 г.
  2. ^ RFC 2616, раздел 3.5: «Агентство по присвоению номеров в Интернете (IANA) действует как реестр токенов значения кодирования контента».
  3. ^ «RFC2616 «Кодирование передачи: gzip, chunked» обрабатывается неправильно» , Chromium Issue 94730
  4. ^ «Параметры протокола передачи гипертекста — реестр кодирования HTTP-контента» . ИАНА . Проверено 18 апреля 2014 г.
  5. ^ «Испытания на сжатие: результаты» . Verve Studios, Co. Архивировано из оригинала 21 марта 2012 года . Проверено 19 июля 2012 г.
  6. ^ «JSR 200: формат сетевой передачи для архивов Java» . Программа Java Community Process.
  7. ^ «Модкомпресс — Lighttpd» . светлые лаборатории . Проверено 18 апреля 2014 г.
  8. ^ ссылка на декомпрессию LZMA
  9. ^ «[MS-PCCRTP]: одноранговое кэширование и извлечение контента: расширения протокола передачи гипертекста (HTTP)» . Майкрософт . Проверено 19 апреля 2014 г.
  10. ^ «rproxy: определение протокола для кодирования HTTP rsync» . rproxy.samba.org .
  11. ^ «[MS-XCA]: Алгоритм сжатия Xpress» . Проверено 29 августа 2015 г.
  12. ^ «Сжатие LZMA2 — MozillaWiki» . Проверено 18 апреля 2014 г.
  13. ^ «Страница проекта mget GitHub» . Гитхаб . Проверено 6 января 2017 г.
  14. ^ «mod_deflate — HTTP-сервер Apache версии 2.4 — Поддерживаемые кодировки» .
  15. ^ «Дополнительная часть руководства по веб-серверу Hiawatha» . Архивировано из оригинала 22 марта 2016 г. Проверено 25 января 2012 г.
  16. ^ «Обслуживание статических файлов является частью документации Армерии» .
  17. ^ «Как работает проверка сжатия gzip?» . httptools.dev, получено 10 апреля 2022 г.
  18. ^ Jump up to: а б «Используйте сжатие, чтобы сделать Интернет быстрее» . Гугл Инк . Проверено 22 мая 2013 г.
  19. ^ "deflate - Почему основные веб-сайты используют gzip?" . Переполнение стека . Проверено 18 апреля 2014 г.
  20. ^ «Испытания на сжатие: О проекте» . Верв Студиос. Архивировано из оригинала 2 января 2015 года . Проверено 18 апреля 2014 г.
  21. ^ «Не теряйте ожидания: HTTP-сжатие» . Веб-производительность Zoompf . Проверено 18 апреля 2014 г.
  22. ^ Jump up to: а б Гудин, Дэн (1 августа 2013 г.). «Угнать за 30 секунд: новая атака выхватывает секреты из страниц, защищенных HTTPS» . Арс Техника . Конде Наст . Проверено 2 августа 2013 г.
  23. ^ Лейден, Джон (2 августа 2013 г.). «Шаг к НАРУШЕНИЮ: разработана новая атака для чтения зашифрованных веб-данных» . Регистр . Проверено 2 августа 2013 г.
  24. ^ Салливан, Ник (11 августа 2016 г.). «ПРЕСТУПЛЕНИЕ, ВРЕМЯ, НАРУШЕНИЕ и ОГРАБЛЕНИЕ: Краткая история атак оракула со сжатием на HTTPS» . Проверено 16 августа 2016 г.
  25. ^ Гудин, Дэн (3 августа 2016 г.). «Эксплойт HEIST. Новая атака крадет SSN, адреса электронной почты и многое другое со страниц HTTPS» . Проверено 16 августа 2016 г.
  26. ^ Бери, Таль. «Идеальное преступление? ВРЕМЯ покажет» (PDF) .
  27. ^ Ванхуф, Мэти. «HEIST: зашифрованная HTTP-информация может быть украдена через TCP-окна» (PDF) .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ddc02f5b480829d241ab3808b561e473__1720127760
URL1:https://arc.ask3.ru/arc/aa/dd/73/ddc02f5b480829d241ab3808b561e473.html
Заголовок, (Title) документа по адресу, URL1:
HTTP compression - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)