Addaw, ir a inicio Donar

Técnica Scripts de servidor WCAG 2.2

SVR1Hacer las redirecciones automáticas en el servidor, no en la página

Nombre oficial en el W3C: Implementar las redirecciones automáticas en el servidor en lugar de en el cliente

En pocas palabras

Cuando una dirección web cambia, hay que llevar a la persona a la nueva de forma automática. Esa redirección debe hacerla el servidor con una respuesta HTTP 301 o 302. No debe hacerse con una etiqueta meta refresh ni con un script que cambie de página.

Por qué es importante

Si la página antigua se carga y unos segundos después salta a otra, la persona se desorienta. Quien usa lector de pantalla (programa que lee en voz alta el contenido) puede estar escuchando la primera página cuando cambia de golpe.

Cuando redirige el servidor, el navegador va directamente a la página nueva. No hay un cambio inesperado, que es lo que pide el criterio 3.2.5.

Cómo se hace

  1. Use el código 301 si el cambio es permanente, por ejemplo cuando la sede electrónica cambia de dirección. Use 302 si es temporal.
  2. En Apache, añada una regla en la configuración o en .htaccess, como Redirect 301 /tramites /sede/tramites.
  3. En PHP, envíe la cabecera antes de cualquier contenido: header('Location: /nueva-pagina', true, 301);
  4. En otros entornos (Java, ASP, Node.js…) use la función de redirección del propio servidor.
  5. Elimine de las páginas las etiquetas meta refresh y los scripts que redirigen al cargar.

Cómo comprobarlo

  1. Abra las herramientas de desarrollo del navegador (tecla F12) y vaya a la pestaña Red.
  2. Visite la dirección antigua y busque su respuesta. Debe tener un código 301 o 302 y una cabecera Location con la nueva dirección.
  3. Revise el código fuente de las páginas. Confirme que no hay redirecciones con meta refresh ni con temporizadores en JavaScript.
Ver el texto completo del W3C (traducción al español)

Esta es una traducción no oficial al español de la técnica SVR1 de Techniques for WCAG 2.2, del W3C. Puede contener errores. El único documento oficial y normativo es la versión original en inglés, publicada en el sitio web del W3C.

Aplicabilidad

Tecnologías del lado del servidor, incluidos los lenguajes de scripting del lado del servidor y los ficheros de configuración del servidor con URL o patrones de URL para redirecciones.

Descripción

El objetivo de esta técnica es evitar la confusión que puede producirse cuando se cargan dos páginas nuevas en rápida sucesión porque una página (la solicitada por el usuario) redirige a otra. Algunos agentes de usuario admiten el uso del elemento meta de HTML para redirigir al usuario a otra página tras un número determinado de segundos. Esto hace que la página resulte inaccesible para algunos usuarios, especialmente para quienes usan lectores de pantalla. Las tecnologías del lado del servidor proporcionan métodos para implementar las redirecciones de una manera que no confunda a los usuarios. Un script o un fichero de configuración del lado del servidor puede hacer que el servidor envíe una respuesta HTTP adecuada, con un código de estado del rango 3xx y una cabecera Location con otra URL. Cuando el navegador recibe esta respuesta, la barra de direcciones cambia y el navegador realiza una petición con la nueva URL.

Ejemplos

JSP/Servlets

En Java Servlets o JavaServer Pages (JSP), los desarrolladores pueden usar HttpServletResponse.sendRedirect(String url).

...
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  ...
  response.sendRedirect("/newUserLogin.do");
}

Esto envía al agente de usuario una respuesta con el código de estado 302 («Found», encontrado) y una cabecera Location con la nueva URL. También es posible establecer otro código de estado con response.sendError(int code, String message), usando como código de estado una de las constantes definidas en la interfaz javax.servlet.http.HttpServletResponse.

...
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  ...
  response.sendError(response.SC_MOVED_PERMANENTLY, "/newUserLogin.do");
}

Si una aplicación usa HttpServletResponse.encodeURL(String url) para reescribir las URL porque la aplicación depende de sesiones, debe usarse el método HttpServletResponse.encodeRedirectURL(String url) en lugar de HttpServletResponse.sendRedirect(String url). También es posible reescribir una URL con HttpServletResponse.encodeURL(String url) y después pasar esa URL a HttpServletResponse.sendRedirect(String url).

ASP

En Active Server Pages (ASP) con VBScript, los desarrolladores pueden usar Response.Redirect.

Response.Redirect "newUserLogin.asp"

o

Response.Redirect("newUserLogin.asp")

El código siguiente es un ejemplo más completo con un código de estado HTTP concreto.

Response.Clear
Response.Status = 301
Response.AddHeader "Location", "newUserLogin.asp"
Response.Flush
Response.End

PHP

En PHP, los desarrolladores pueden enviar una cabecera HTTP sin procesar con el método header. El código siguiente envía un código de estado 301 y una nueva ubicación. Si el estado no se establece explícitamente, la respuesta de redirección envía el código de estado HTTP 302.

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.example.com/newUserLogin.php");
?>

Apache

Los desarrolladores pueden configurar el servidor web Apache para que gestione las redirecciones, como en el ejemplo siguiente.

redirect 301 /oldUserLogin.jsp https://www.example.com/newUserLogin.do

Pruebas

Procedimiento

  1. Localizar cada enlace o referencia programática a otra página o página web.
  2. Para cada enlace o referencia programática a un URI dentro del conjunto de páginas web que se evalúa, comprobar si la página web referenciada contiene código (p. ej., un elemento meta o un script) que provoque una redirección en el lado del cliente.
  3. Para cada enlace o referencia programática a un URI dentro del conjunto de páginas web que se evalúa, comprobar si el URI referenciado no provoca ninguna redirección O provoca una redirección en el lado del servidor sin tiempo de espera.

Resultados esperados

  • La comprobación n.º 2 es falsa y la comprobación n.º 3 es verdadera.

Recursos

Cómo lo comprobamos en ADDAW

En cada auditoría de ADDAW revisamos esta técnica página a página y le entregamos los errores con capturas y la forma de corregirlos.

Solicitar una auditoría

Basado en la técnica SVR1 del W3C (WCAG 2.2). Explicación y ejemplos: ADDAW. Traducción no oficial del texto del W3C © W3C, licencia de documentos del W3C. ¿Ha visto un error? Escríbanos.