Modificación de encabezados de respuesta HTTP
Esta sección de la documentación se aplica al módulo URL Rewrite Versión 2.0 para IIS 7.
En este tutorial se le guía por el uso del módulo URL Rewrite Versión 2.0 para IIS 7 a fin de establecer encabezados de respuesta HTTP.
Requisitos previos
Para este tutorial se necesitan los siguientes requisitos previos:
- IIS 7 o posterior con el servicio de rol ASP.NET habilitado;
- Módulo URL Rewrite 2.0 versión candidata para lanzamiento instalada;
- Tutorial completado en Proxy inverso con URL Rewrite v2 y Enrutamiento de solicitud de aplicaciones.
Introducción
El módulo URL Rewrite 2.0 proporciona compatibilidad con la reescritura basada en reglas de los encabezados HTTP de respuesta. Un escenario de uso muy común para establecer los encabezados de respuesta consiste en modificar la respuesta de redirección generada por una aplicación detrás de un equilibrador de carga o un proxy inverso. Por ejemplo, cuando una aplicación detrás de un proxy inverso devuelve una respuesta de redirección, es posible que el encabezado Location de HTTP de la respuesta no represente la dirección accesible desde Internet, sino una dirección de aplicación interna. El módulo URL Rewrite 2.0 se puede usar en el servidor proxy inverso para modificar el encabezado Location en la respuesta. El escenario se representa en el diagrama siguiente:
- Un cliente HTTP realiza una solicitud a una página web
http://www.contoso.com/webmail/oldpage.aspx
. - El servidor proxy inverso usa URL Rewrite 2.0 y Enrutamiento de solicitud de aplicaciones para reenviar la solicitud a un servidor de contenido interno en función del nombre de la carpeta en la ruta de acceso de la URL solicitada. Por ejemplo,
http://webmail/oldpage.aspx
; - La aplicación web que se ejecuta en el servidor de contenido emite una respuesta de redirección (HTTP/1.1 301) que apunta un cliente HTTP a
http://webmail/newpage.aspx
; - El servidor proxy inverso usa URL Rewrite 2.0 para reemplazar la ubicación de redirección de base interna en la respuesta por la ubicación de redirección basada en Internet:
http://www.contoso.com/webmail/newpage.aspx
.
Configuración de un escenario de tutorial
Para configurar el escenario del tutorial, complete el tutorial sobre Proxy inverso con URL Rewrite v2 y Enrutamiento de solicitud de aplicaciones. Al final de ese tutorial, debería tener un sitio web de proxy inverso que enruta las solicitudes a dos aplicaciones de contenido: correo web y nómina.
Para este tutorial, deberá agregar lógica de redirección a la aplicación de correo web. En un escenario real, probablemente sería un redireccionamiento iniciado por el código de la aplicación web, pero, por motivos de simplicidad, en este tutorial usará una regla de redireccionamiento en el módulo URL Rewrite.
Cree un archivo denominado web.config en la carpeta siguiente:
%SystemDrive%\inetpub\webmail
Abra el archivo en un editor de texto, pegue el código XML siguiente dentro y guarde el archivo:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Redirect" stopProcessing="true"> <match url="^index\.aspx$" /> <action type="Redirect" url="default.aspx" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
Se trata de una regla que redirigirá todas las solicitudes de index.aspx a default.aspx.
Ahora abra un explorador web y realice una solicitud http://localhost/webmail/index.aspx
. Observe que el explorador se ha redirigido a http://localhost:8081/default.aspx
, que es básicamente una dirección URL interna que usa la aplicación web de correo web. Ahora configurará las reglas de URL Rewrite para modificar el encabezado Location HTTP en las respuestas de redirección HTTP para que el explorador se redirija a una dirección URL adecuada: http://localhost/webmail/default.aspx
.
Modificación de la regla de entrada para conservar el encabezado host
Para poder modificar el encabezado Location HTTP, es necesario conservar el valor original del encabezado host HTTP. La regla de reescritura de salida usa el valor conservado al modificar la respuesta. Para conservar el valor original, almacénelo en una variable de servidor temporal ORIGINAL_HOST.
- En la página principal de la vista de características de URL Rewrite, seleccione Ver variables de servidor en el panel Acciones del lado derecho:
- En la página Variables de servidor permitidas, seleccione Agregar y, después, escriba el nombre de la variable de servidor que se usará para almacenar temporalmente el valor del encabezado host HTTP. Por ejemplo, ORIGINAL_HOST:
- Seleccione Aceptar para guardar los cambios y, después, vuelva a la página principal de la vista de características de URL Rewrite. Después, seleccione la regla de entrada "Proxy inverso a correo web" y seleccione Editar.
- En la página Editar regla de entrada, expanda el cuadro de grupo "Variables de servidor", después seleccione Agregar y escriba "ORIGINAL_HOST" para el nombre de la variable de servidor y "{HTTP_HOST}" para "Valor":
Creación de una regla de salida para modificar el encabezado de respuesta HTTP
Ahora creará una regla de reescritura de salida que reescriba el encabezado Location HTTP en las respuestas de redirección para agregar la carpeta de la aplicación a la ruta de acceso de la dirección URL y reemplazar el nombre de host.
- En la página principal de la vista de características de URL Rewrite, seleccione "Agregar reglas" y, después, seleccione "Regla en blanco" en la categoría "Reglas de salida".
- En la página "Editar regla de salida", asigne un nombre a la regla como "Reescritura del encabezado Location".
- En la lista desplegable "Condición previa", elija "<Crear nueva condición previa>".
- En el cuadro de diálogo "Agregar condición previa", asigne el nombre "IsRedirection" a la condición previa.
- Seleccione "Agregar" y escriba {RESPONSE_STATUS} como entrada de condición y "3\d\d" como patrón. Esta condición previa se usa para comprobar si la respuesta tiene un código de estado de redireccionamiento, como 301, 302, 307, etc. El cuadro de diálogo de condición previa debería ser similar al siguiente:
- Seleccione Aceptar para volver a la página Editar regla de salida.
- En el cuadro de grupo Coincidencia, use la lista desplegable Ámbito de coincidencia para seleccionar Variable de servidor.
- Escriba RESPONSE_Location para "Nombre de variable" y "^http://[^/]+/(.*)" para "Patrón". Esto configura la regla para que funcione en el encabezado HTTP de respuesta "Location" y compare su valor con un patrón de expresión regular que almacena la ruta de acceso de la dirección URL en una referencia inversa.
- Expanda el cuadro de grupo "Condiciones", seleccione "Agregar" y escriba {ORIGINAL_HOST} como entrada de condición y ".+" como patrón de condición. Esta condición comprueba si la variable de servidor temporal ORIGINAL_HOST existe y tiene un valor no vacío.
- Seleccione Agregar una vez más y agregue otra condición. Establezca la entrada de condición en {URL} y el patrón en "^/(webmail|payroll)/.*". Esta expresión regular se usa para buscar coincidencias con las rutas de acceso de URL que comienzan por /webmail o /payroll. Además, los paréntesis dentro del patrón capturan la parte de la cadena de la URL coincidente, de modo que se pueda reutilizar al construir la dirección URL de reemplazo.
- Por último, en el cuadro de grupo "Acción", elija la acción "Reescribir" y escriba "
http://{ORIGINAL_HOST}/{C:1}/{R:1}
" como valor. Esta acción reemplaza el valor del encabezado Location HTTP por una cadena construida mediante el nombre de host de la variable de servidor, la referencia inversa de condición que contiene el prefijo de carpeta de la ruta de acceso de la URL y la referencia inversa de la regla que contiene la ruta de acceso de la URL actual en el encabezado Location.
La página completa debería ser similar a la :
Prueba de la regla
Para probar que todas las reglas funcionan correctamente, abra un explorador web y realice una solicitud a http://localhost/webmail/index.aspx
. El explorador debe redirigirse a http://localhost/webmail/default.aspx
:
Resumen
Este tutorial:
- Ha aprendido a usar varias características nuevas de URL Rewrite 2.0 para implementar un escenario de proxy inverso totalmente funcional.
- Ha configurado la regla de entrada para reenviar las solicitudes a un servidor de contenido de back-end y establecer una variable de servidor temporal.
- Después, ha definido una regla de salida que modifica el encabezado Location HTTP en la respuesta de redirección generada por la aplicación web desde el servidor de contenido de back-end.