Usando regras de saída para adicionar código de acompanhamento da Análise da Web
por Ruslan Yakushev
Esta seção da documentação se aplica à versão 2.0 do Módulo de reescrita de URL do IIS 7.
Este passo a passo orientará você sobre como criar uma regra de reescrita de saída do IIS que insere o script de acompanhamento de análise da Web em páginas da Web.
Pré-requisitos
Para executar este passo a passo, você deve ter o seguinte:
- URL Rewrite Module 2.0 RCrelease instalado.
Introdução
A finalidade de um serviço de análise da Web é fornecer aos editores de sites informações estatísticas sobre os visitantes de seus sites. Essas informações ajudam os editores de sites a otimizar o conteúdo, os anúncios e as ofertas de serviço, a fim de aumentar a satisfação do cliente e o ROI. Normalmente, os serviços online de análise da Web, como o Google Analytics ou o Omniture, funcionam coletando dados sobre visitantes do site. Quando os proprietários do site solicitam relatórios, o provedor de análise da Web processa esses dados e os apresenta aos proprietários do site em um formato conveniente e fácil de entender. Para habilitar a coleta de dados necessária para análise, os proprietários de sites devem instrumentar todas as páginas em um site com um script de acompanhamento emitido pelo provedor de serviços de análise da Web
Em alguns casos, a adição do código de acompanhamento às páginas da Web é uma tarefa simples. No entanto, em muitos casos, pode ser necessário adicionar manualmente o script a várias páginas da Web. Nesses casos, a instrumentação de análise da Web torna-se uma tarefa cara e demorada. A funcionalidade de reescrita de resposta no módulo de reescrita de URL versão 2 pode ajudar nessas situações executando as regras de saída que alteram o conteúdo da resposta em tempo real.
Criando uma regra de reescrita de saída
Para começar, você criará uma regra de reescrita de saída que adiciona um snippet de código JavaScript à resposta HTML. O snippet de código é inserido imediatamente antes da marca de fechamento </body>, como na ilustração a seguir
...
<script type='text/javascript'>
//Your web analytics tracking code goes here...
</script>
</body>
AVISO: Neste exemplo específico, o código JavaScript é considerado de uma fonte confiável e deve ser inserido na página HTML como está. Em muitos outros casos, quando os cabeçalhos de resposta ou o conteúdo da resposta são modificados por uma regra de reescrita de saída, um cuidado extra deve ser tomado para garantir que o texto inserido na resposta não contenha nenhum código executável do lado do cliente, o que pode resultar em vulnerabilidades de script entre sites. Isso é especialmente importante quando a regra de reescrita usa dados não confiáveis, como cabeçalhos HTTP ou a cadeia de caracteres de consulta, para criar a cadeia de caracteres que será inserida na resposta HTTP. Nesses casos, a cadeia de caracteres de substituição deve ser codificada em HTML usando a função HtmlEncode, por exemplo:
<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />
Para criar a regra de saída:
- Abra o Gerenciador do IIS
- Selecione "Site Padrão"
- No Modo de Exibição de Recurso, selecione "Módulo de Reescrita de URL"
- No painel Ações, no lado direito, clique em "Adicionar Regras...". Na caixa de diálogo "Adicionar Regras", selecione a "Regra em Branco" na categoria "Regras de saída" e clique em OK.
Agora você deve definir a regra de saída real. No Módulo de Reescrita de URL 2.0, uma regra de reescrita de saída é definida especificando as seguintes informações:
- Nome da regra.
- Uma pré-condição opcional que controla se essa regra deve ser aplicada a uma resposta.
- O padrão a ser usado para corresponder à cadeia de caracteres na resposta.
- Um conjunto opcional de condições.
- A ação a ser executada se um padrão for correspondido e todas as verificações de condição forem bem-sucedidas.
Nomeando a regra
Na caixa de texto "Nome", insira um nome que identificará exclusivamente a regra, por exemplo: "Adicionar script de acompanhamento".
Definindo uma pré-condição
Uma pré-condição é usada para avaliar se a avaliação de regras de saída deve ser executada em uma resposta. Por exemplo, se uma regra que modifica o conteúdo HTML, somente as respostas HTTP com o cabeçalho do tipo conteúdo definido como "texto/html" devem ser avaliadas em relação a essa regra. A avaliação de regras de saída e a reescrita de conteúdo são uma operação intensiva de CPU que pode afetar negativamente o desempenho de um aplicativo Web. Portanto, use pré-condições para restringir os casos em que as regras de saída são aplicadas.
Como a regra que você está criando deve ser aplicada somente em respostas HTML, você definirá uma pré-condição que verifica se o tipo de conteúdo do cabeçalho de resposta HTTP é equial para "texto/html".
Para definir uma pré-condição:
Na lista de pré-condições, selecione "<Criar Pré-condição...>".
Isso levará você à caixa de diálogo do editor de pré-condição, na qual você precisará definir a pré-condição. Especifique as configurações de pré-condição da seguinte maneira:
Nome: "IsHTML"
Usando: "Expressões regulares"
Clique em "Adicionar" para abrir a caixa de diálogo "Adicionar condição". Nesta caixa de diálogo, especifique:
Entrada de condição: "{RESPONSE_CONTENT_TYPE}"
Verificar se a cadeia de caracteres de entrada: "Corresponde ao padrão"
Padrão: "^texto/html"
Clique em OK para salvar a pré-condição e retornar à página "Editar Regra".
Definindo um escopo correspondente
A regra de reescrita de saída pode operar no conteúdo de um cabeçalho HTTP ou no conteúdo do corpo da resposta. Essa regra precisa modificar o conteúdo da resposta para que na lista suspensa "Escopo Correspondente" escolha "Resposta".
Como definir um padrão
Na lista suspensa "Usando:", escolha a opção "Correspondência exata".
Na caixa de texto "Padrão", insira a seguinte cadeia de caracteres:
</body>
Como definir uma ação
Escolha o tipo de ação "Reescrever" listado na caixa de grupo "Ação". Na caixa de texto "Valor", insira a seguinte cadeia de caracteres:
<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>
Essa cadeia de caracteres especifica o novo valor que será usado como uma substituição para a cadeia de caracteres correspondente em uma resposta. Nesse caso específico, a cadeia de caracteres "</body>" será substituída pelo snippet de código JavaScript seguido pela marca de corpo HTML de fechamento.
Deixe valores padrão para todas as outras configurações. A página de propriedades "Editar Regra" deve se parecer com a seguinte página:
Salve a regra clicando na ação "Aplicar" no lado direito.
Exibindo a regra de reescrita no arquivo de configuração
As regras de reescrita são armazenadas no arquivo aplicationHost.config ou em arquivos web.config. Para verificar a configuração da regra que acabamos de criar, abra um arquivo web.config localizado em %SystemDrive%\inetput\wwwroot\
. Neste arquivo, você deverá ver a seção <rewrite>
que contém todas as definições de regras:
<rewrite>
<outboundRules>
<rule name="Add tracking script" patternSyntax="ExactMatch" preCondition="">
<match filterByTags="None" pattern="</body>" />
<action type="Rewrite" value="<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Como testar a regra
Para testar se a regra adiciona corretamente um código JavaScript à página da Web, solicite essa URL http://localhost/iisstart.htm
.
Depois de obter uma resposta do servidor, abra o código-fonte HTML real (se estiver usando o Internet Explorer 8, vá para Page --> Exibir Origem). O HTML de resposta conterá o código JavaScript antes da marca de corpo HTML de fechamento:
Resumo
Neste passo a passo, você aprendeu a usar regras de saída no módulo de reescrita de URL versão 2 para modificar o conteúdo da resposta HTTP em tempo real. Essa funcionalidade é muito útil quando você precisa executar pequenas modificações em respostas HTTP geradas por aplicativos Web, mas você não tem controle do aplicativo ou não é prático fazer alterações em larga escala no aplicativo.