Encaminhar o navegador a uma URL com ASP detalhado

Recebemos uma consulta interessante que acho que ainda não havíamos tratado com profundidade anteriormente. Trata-se do método redirect do objeto response, que em determinadas situações dá um erro, que nos relatava um visitante da seguinte maneira:

Sempre trabalhei em win2k e IIS para páginas ASP pessoais, mas agora estou em Win98 com PWS e as páginas que tinha funcionando em IIS com PWS me geram um erro Response.Redirect com a seguinte mensagem de erro:

“Os cabeçalhos HTTP já estão escritos no explorador cliente. Qualquer mudança no cabeçalho HTTP deve ser feita antes de escrever o conteúdo da página.” 

Método redirect

É um método do objeto response e serve para mandar o navegador a uma página que deve se indicar como parâmetro. Um exemplo de utilização seria:

response.redirect “sua_pagina.html”

Isto faria com que o nosso navegador se situasse na página sua_pagina.html.

O redirect se realiza enviando nos cabeçalhos do HTTP a ordem de encaminhamento. O caso é que não se pode enviar nada nos cabeçalhos do HTTP se já se começou a escrever texto da página web, ainda que seja um simples espaço.

Portanto, este código é incorreto:

<head>
<title>Olá</title>
</head>
<%
response.redirect “xxx.asp”
%>

É incorreto porque antes de fazer o redirect foi escrito dentro da página web, neste caso é informação de cabeçalho, porém, este cabeçalho do documento HTML não é o mencionado cabeçalho do HTTP, que o mandam os servidores internamente sem que o programador participe ativamente, salvo para introduzir informação como um redirect ou um refresh a partir de funções ASP.

Armazenamento em buffer da página

Em instalações de ASP a partir da 3.0 se utiliza um buffer de armazenamento da página que tem como missão ir recolhendo o código HTML resultante da execução da página ASP, antes de manda-lo ao cliente. O buffer vai enchendo e quando termina de executar a página manda definitivamente por Internet até o computador do usuário.

A utilização do buffer em ASP 3.0 (IIS 5.0) encontra-se pré-determinada, enquanto que em outras versões de ASP, como a do Personal Web Server (PWS), está pré-determinado para não se utilizar.

Segundo aponta então, em ASP 2.0 e anteriores vai sendo enviado a página ao cliente à medida que for se executando e em ASP 3.0 até que não termina de se executar inteira, a página não é enviada ao cliente.

Sendo assim, o código anterior, onde se escrevia na página antes de executar um redirect, embora esteja mal desenhado em qualquer caso, pode dar erro ou pode não dar nenhum erro. Tudo vai depender de se havia ou não enviado texto ao cliente previamente à realização do redirect.

Tudo isto tem muito a ver com o buffer, pois, se está sendo utilizado, não se envia nada ao cliente e o redirect se realiza sem haver enviado texto, apesar de estiver escrito na página. Se não se utiliza o buffer, o texto colocado antes do redirect sim que teria sido enviado ao cliente e ao executar o redirect apareceria o erro que nos comentava nosso leitor.

Utilização ou não do buffer

Para indicar que se deseja utilizar o buffer temos que escrever esta sentença no princípio do código ASP.

response.buffer = true

Se coloca-se em ASP 3.0 não serve para nada, porque essa opção já estava pré-determinada. Porém, de qualquer forma, não incomoda e pelo menos nos asseguramos que se utilizará o buffer se as páginas forem transferidas a um servidor com ASP 2.0.

Se desejarmos fazer um redirect depois de ter escrito texto no buffer, o correto seria executar estas duas sentenças juntas:

response.clear response.redirect “http://www.oquefor.com”

A primeira linha indica que se deve esvaziar o buffer, com o qual se elimina o que tiver sido escrito na página, e a segunda indica que faça o encaminhamento. Insisto, isto só é possível se o buffer estiver sendo utilizado.

Fonte: http://www.criarweb.com/artigos/668.php

Deixe um comentário