Использование правил для исходящего трафика для добавления кода отслеживания веб-аналитики

Руслан Якушев

Этот раздел документации относится к модулю переопределения URL-адресов версии 2.0 для IIS 7.

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

Необходимые компоненты

Чтобы выполнить это пошаговое руководство, необходимо иметь следующее:

  1. Установлен модуль перезаписи URL-адресов 2.0 RCrelease.

Введение

Цель службы веб-аналитики — предоставить издателям веб-сайта статистические сведения о посетителях своих сайтов. Эта информация помогает издателям сайтов оптимизировать контент, объявления и предложения услуг, чтобы повысить удовлетворенность клиентов и roI. Как правило, веб-аналитики, такие как Google Analytics или Omniture, работают, собирая данные о посетителей веб-сайта. Когда владельцы сайтов запрашивают отчеты, поставщик веб-аналитики обрабатывает эти данные и предоставляет его владельцам сайтов в удобном, простом формате. Чтобы включить сбор данных, необходимый для аналитики, владельцы веб-сайта должны инструментировать все страницы на веб-сайте с помощью скрипта отслеживания, выданного поставщиком услуг веб-аналитики.

В некоторых случаях добавление кода отслеживания на веб-страницы является простой задачей. Однако во многих случаях может потребоваться вручную добавить скрипт на многочисленные веб-страницы. В таких случаях инструментирование веб-аналитики становится дорогостоящим и трудоемким. Возможность перезаписи ответов в модуле перезаписи URL-адресов версии 2 может помочь в этих ситуациях, выполнив правила исходящего трафика, которые изменяют содержимое ответа на лету.

Создание правила перезаписи исходящего трафика

Для начала вы создадите правило перезаписи исходящего трафика, которое добавляет фрагмент кода JavaScript в HTML-ответ. Фрагмент кода вставляется непосредственно перед закрывающим <тегом /body> , как показано на следующем рисунке.

... 
    <script type='text/javascript'>
        //Your web analytics tracking code goes here...
    </script>
</body>

Пример кода отслеживания веб-аналитики H T M L и кода X M L с функцией HtmlEncode.ПРЕДУПРЕЖДЕНИЕ: В этом примере предполагается, что код JavaScript является из доверенного источника, и его следует вставить на HTML-страницу как есть. Во многих других случаях при изменении заголовков ответа или содержимого ответа правилом перезаписи исходящего трафика следует соблюдать дополнительную осторожность, чтобы убедиться, что текст, вставленный в ответ, не содержит исполняемый код на стороне клиента, что может привести к уязвимостям в межсайтовых сценариях. Это особенно важно, если правило перезаписи использует ненадежные данные, такие как заголовки HTTP или строка запроса, для создания строки, которая будет вставлена в ответ HTTP. В таких случаях строка замены должна быть закодирована с помощью функции HtmlEncode , например:

<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />

Чтобы создать правило исходящего трафика, выполните следующие действия.

  1. Открытие диспетчера IIS
  2. Выберите "Веб-сайт по умолчанию"
  3. В представлении компонентов выберите "Модуль переопределения URL-адресов"
    Снимок экрана: представление окна
  4. В области действий справа щелкните "Добавить правила...". В диалоговом окне "Добавить правила" выберите "Пустое правило" в категории "Правила исходящего трафика" и нажмите кнопку "ОК".
    Снимок экрана: диалоговое окно

Теперь необходимо определить фактическое правило исходящего трафика. В модуле переопределения URL-адресов 2.0 правило перезаписи исходящего трафика определяется путем указания следующих сведений:

  • Имя правила.
  • Необязательное условие, определяющее, следует ли применять это правило к ответу.
  • Шаблон, используемый для сопоставления строки в ответе.
  • Необязательный набор условий.
  • Действие, выполняемое при сопоставлении шаблона, и все проверки условий выполнены успешно.

Именование правила

В текстовом поле "Имя" введите имя, уникально определяющее правило, например "Добавить скрипт отслеживания".

Определение предусловия

Предварительные условия используются для оценки того, следует ли выполнять оценку правил исходящего трафика в ответе. Например, если правило, изменяющее HTML-содержимое, следует оценить только HTTP-ответы с заголовком типа контента, равным text/html. Оценка исходящих правил и перезапись содержимого — это активная операция ЦП, которая может негативно повлиять на производительность веб-приложения. Таким образом, используйте предварительные условия, чтобы сузить ситуации, когда применяются правила исходящего трафика.

Так как создаваемое правило должно применяться только к html-ответам, вы определите условие, которое проверяет, является ли тип контента заголовка HTTP-ответа эквивалентным "text/html".

Чтобы определить условие, выполните следующее:

  1. В списке предварительных условий выберите "<Создать новое условие...>".

  2. Откроется диалоговое окно редактора предварительных условий, в котором необходимо определить условие. Укажите параметры предварительных условий следующим образом:

    • Имя: IsHTML

    • Использование: "Регулярные выражения"

    • Нажмите кнопку "Добавить", чтобы открыть диалоговое окно "Добавить условие". В этом диалоговом окне укажите следующее:

      • Входные данные условия: "{RESPONSE_CONTENT_TYPE}"

      • Проверьте, соответствует ли входная строка: "Соответствует шаблону"

      • Шаблон: "^text/html"

        Снимок экрана: диалоговое окно

  3. Нажмите кнопку "ОК", чтобы сохранить предварительные условия и вернуться на страницу "Изменить правило".

Определение соответствующей области

Правило перезаписи исходящего трафика может работать с содержимым заголовка HTTP или содержимого текста ответа. Это правило должно изменить содержимое ответа, поэтому в раскрывающемся списке "Область сопоставления" выберите "Ответ".

Определение шаблона

В раскрывающемся списке "Использование:" выберите параметр "Точное соответствие".

В текстовом поле "Шаблон" введите следующую строку:

</body>

Определение действия

Выберите тип действия "Перезаписать", указанный в поле "Действие". В текстовом поле "Значение" введите следующую строку:

<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>

Эта строка указывает новое значение, которое будет использоваться в качестве замены соответствующей строки в ответе. В этом случае строка "</body>" будет заменена фрагментом кода JavaScript, за которым следует закрывающий тег текста HTML.

Оставьте значения по умолчанию для всех остальных параметров. Страница свойств "Изменить правило" должна выглядеть следующим образом:

Снимок экрана: страница свойства

Сохраните правило, нажав кнопку "Применить" в правой части.

Просмотр правила перезаписи в файле конфигурации

Правила переопределения хранятся в файле aplicationHost.config или в файлах web.config. Чтобы проверить конфигурацию только что созданного правила, откройте файл web.config, расположенный в %SystemDrive%\inetput\wwwroot\. В этом файле вы увидите <rewrite> раздел, содержащий все определения правил:

<rewrite>
 <outboundRules>
  <rule name="Add tracking script" patternSyntax="ExactMatch" preCondition="">
   <match filterByTags="None" pattern="&lt;/body>" />
   <action type="Rewrite" value="&lt;script type='text/javascript'>//Your web analytics tracking code goes here...&lt;/script>&lt;/body>" />
  </rule>
 <preConditions>
  <preCondition name="IsHTML">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
  </preCondition>
 </preConditions>
</outboundRules>
</rewrite>

Тестирование правила

Чтобы проверить правильное добавление кода JavaScript на веб-страницу, запросите этот URL-адрес http://localhost/iisstart.htm.

После получения ответа с сервера откройте фактический исходный код HTML (если используется Internet Explorer 8, перейдите на страницу —> просмотр источника). HTML-код ответа будет содержать код JavaScript перед закрывающим тегом текста HTML:

Снимок экрана: окно I S 7 с блокнотом с кодом JavaScript.

Итоги

В этом пошаговом руководстве вы узнали, как использовать правила для исходящего трафика в модуле переопределения URL-адресов версии 2, чтобы изменить содержимое ответа HTTP на лету. Эта возможность очень полезна, если требуется внести незначительные изменения в http-ответы, созданные веб-приложениями, но у вас нет контроля над приложением или нет практического применения крупномасштабных изменений в приложении.