> Manuales > Taller de ASP

Notas interesantes sobre la utilización del método redirect del objeto response. Explicamos la razón de un posible error al utilizarlo y como evitarlo.

Nos ha llegado una consulta interesante que creo que no habíamos tratado con profundidad anteriormente. Se trata del método redirect del objeto response, que en determinadas situaciones da un error, que nos relataba un visitane de la siguiente manera:

Siempre trabaje en win2k e IIS para paginas ASP personales, pero ahora estoy en Win98 con PWS y las paginas que tenia funcionando en IIS con PWS me genera un error el Response.Redirect con el siguiente mensaje de error:

"Los enbezados HTTP ya están escritas en el explorador cliente. Cualquier cambio en el encabezado HTTP se debe hacer antes de escribir el contenido de la página."

Método redirect

Es un método del objeto response y sirve para mandar al navegador a una página que debe indicarse como parámetro. Un ejemplo de utilización sería:

response.redirect "tu_pagina.html"

Esto haría que nuestro navegador se situara en la página tu_pagina.html.

El redirect se realiza enviando en las cabeceras del HTTP la orden de redirección. El caso es que no se puede enviar nada en las cabeceras del HTTP si ya se ha empezado a escribir texto de la página web, aunque sea un simple espacio.

Por tanto, este código es incorrecto:

<head>
<title>Hola</title>
</head>
<%
    response.redirect "xxx.asp"
%>


Es incorrecto porque antes de hacer el redirect se ha escrito dentro de la página web, en este caso es información de cabecera, pero esta cabecera del documento HTML no es la mencionada cabecera del HTTP, que la mandan los servidores internamente sin que el programador participe activamente, salvo para introducir información como un redirect o un refresh a partir de funciones ASP.

Almacenamiento en buffer de la página

En instalaciones de ASP a partir de la 3.0 se utiliza un buffer de almacenamiento de la página que tiene como misión ir recogiendo el código HTML resultante de la ejecución de la página ASP, antes de mandarlo al cliente. El buffer se va llenando y cuando termina de ejecutarse la página se manda definitivamente por Internet hasta el ordenador del usuario.

La utilización del buffer en ASP 3.0 (IIS 5.0) se encuentra predeterminada, mientras que en otras versiones de ASP, como la del Personal Web Server (PWS), está predeterminado para no utilizarse.

Según se apunta entonces, en ASP 2.0 y anteriores se va enviando la página al cliente a medida que se va ejecutando y en ASP 3.0 hasta que no se termina de ejecutar entera, la página no se envía al cliente.

Así pues, el código anterior, donde se escribía en la página antes de ejecutar un redirect, aunque está mal diseñado en cualquier caso, puede dar error o puede no dar ningún error. Todo depende de si se había o no enviado texto al cliente previamente a la realización del redirect.

Todo esto tiene mucho que ver con el buffer, pues, si se está utilizando, no se envía nada al cliente y el redirect se realiza sin haber enviado texto, aunque sí se haya escrito en la página. Si no se utiliza el buffer el texto colocado antes del redirect sí se hubiese enviado al cliente y al ejecutar el redirect aparecería el error que nos comentaba nuestro lector.

Utilización o no del buffer

Para indicar que se desea utilizar el buffer hay que escribir esta sentencia al principio del código ASP.

response.buffer = true

Si se coloca en ASP 3.0 no sirve para nada, porque esa opción ya estaba predeterminada. Pero, en cualquier caso, no molesta y nos aseguramos que se utilizará el buffer si las páginas se trasladan a un servidor con ASP 2.0.

Si deseamos hacer un redirect después de haber escrito texto en el buffer, lo correcto sería ejecutar estas dos sentencias juntas:

response.clear response.redirect "http://www.loquesea.com"

La primera línea indica que se debe vaciar el buffer, con lo que se elimina lo que se haya escrito en la página, y la segunda indica que se haga la redirección. Insisto, esto sólo es posible si se está utilizando el buffer.

Referencias: La sentencia redirect se utiliza en muchos ejemplos dentro de DesarrolloWeb, pero se explica en el artículo Objeto response. Este artículo se engloba, junto con otros artículos de ASP básicos, en el manual Programación en ASP.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual