Введение
Протокол адаптации интернет-контента (ICAP) — это облегчённый протокол, подобный HTTP, который используется для расширения возможностей прозрачных прокси-серверов, высвобождая ресурсы и стандартизируя способы внедрения новых функций. ICAP обычно применяется для реализации сканирования на вирусы и контент-фильтров в прозрачных HTTP-прокси-кэшах. Адаптация контента подразумевает выполнение определённой услуги с добавленной стоимостью (манипулирование контентом) для соответствующего клиентского запроса или ответа. ICAP ориентирован на использование периферийных устройств (кэширующих прокси-серверов) для предоставления услуг с добавленной стоимостью. В основе этого процесса лежит кэш, который выполняет проксирование всех клиентских транзакций и обрабатывает их через веб-серверы. Эти серверы ICAP специализируются на конкретной функции, например, на вставке рекламы, сканировании на вирусы, многократном сканировании антивирусами, переводе контента, переводе языка или фильтрации контента. Перенос услуг с добавленной стоимостью с веб-серверов на серверы ICAP позволяет масштабировать эти веб-серверы в соответствии с их пропускной способностью HTTP, а не заставлять их обрабатывать дополнительные задачи.
История
ICAP был предложен в конце 1999 года Питером Данцигом и Джоном Шустером из Network Appliance. Дон Гиллис возглавил проект весной 2000 года и усовершенствовал протокол тремя основными способами:
Во-первых, была обеспечена возможность использования ICAP-серверов с конвейерной обработкой. Это позволяло быстро передавать одну веб-страницу через серверы для сканирования на вирусы, фильтрации контента и перевода языков. Во-вторых, была добавлена поддержка всех трех типов кодирования контента (длина контента, фрагментированное и TCP close) в HTTP 1.1. Это заменило исходный протокол "храни и пересылай" непрерывной потоковой передачей контента через множество серверов одновременно. В-третьих, была реализована функция "предварительный просмотр контента", позволяющая ICAP-серверу просматривать первые несколько сотен байт контента, прежде чем принимать решение о его обработке. Это было реализовано путем включения аргумента размера предварительного просмотра в URL веб-сервера ICAP при настройке на стороне клиента ICAP. В середине 2000 года Гиллис создал прототип первого клиента и сервера ICAP для серии интернет-кэшей NetCache (известный как протокол ICAP 0.9) и подготовил учебные материалы для поставщиков. Клиент был написан на C++ в ядре сервера NetCache, а демонстрационный ICAP-сервер – на Perl, с использованием фильтров замены слов Debian для перезаписи веб-страниц, игнорируя HTML-теги, и перевода веб-страниц на "шведский шеф-повар" или "Jive" в режиме реального времени. На основе опыта, полученного при создании прототипа, Гиллис пересмотрел проект стандарта IETF, чтобы RPC использовали только фрагментированное кодирование, что значительно упростило протокол ICAP.
To allow pipelined ICAP servers. One web page could be streamed through virus scan, content filtering, and language translation servers, quickly. To support all 3 content encodings (content length, chunked, and TCP close) in HTTP 1.1. This replaced original store and forward protocol with continuous streaming of content through many servers at once. To provide a feature called "content preview" that allowed the ICAP server to look at the first few hundred bytes of content before deciding to process the content or not. This was implemented by embedding the preview argument size in the ICAP webserver URL when configured on the ICAP client. Gillies prototyped the first ICAP client and server for the NetCache series of internet caches in mid 2000 (known as ICAP 0.9 protocol) and produced training materials for vendors. The client was written in C++ in the core of the NetCache server, and the demonstration ICAP Server was written in Perl and employed the Debian word replacement filters to rewrite web pages, skipping over the HTML tags, and translating web pages into Swedish Chef or Jive in real time. With knowledge learned from the prototyping experience, Gillies revised the IETF draft standard to make RPCs using only chunked encoding, greatly simplifying the ICAP protocol.