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
- Use el código
301si el cambio es permanente, por ejemplo cuando la sede electrónica cambia de dirección. Use302si es temporal. - En Apache, añada una regla en la configuración o en
.htaccess, comoRedirect 301 /tramites /sede/tramites. - En PHP, envíe la cabecera antes de cualquier contenido:
header('Location: /nueva-pagina', true, 301); - En otros entornos (Java, ASP, Node.js…) use la función de redirección del propio servidor.
- Elimine de las páginas las etiquetas
meta refreshy los scripts que redirigen al cargar.
Cómo comprobarlo
- Abra las herramientas de desarrollo del navegador (tecla F12) y vaya a la pestaña Red.
- Visite la dirección antigua y busque su respuesta. Debe tener un código
301o302y una cabeceraLocationcon la nueva dirección. - Revise el código fuente de las páginas. Confirme que no hay redirecciones con
meta refreshni 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
- Localizar cada enlace o referencia programática a otra página o página web.
- 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.
- Para cada enlace o referencia programática a un URI dentro del conjunto de páginas web que se evalúa, comprobar si el
URIreferenciado 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
- Use standard redirects: do not break the back button! (consejo de calidad del W3C: use redirecciones estándar y no rompa el botón «Atrás»).
- RFC 9110: HTTP Semantics 15.4. Redirection 3xx.
- Interface javax.servlet.http.HttpServletResponse en la documentación de la API de Java Servlets 6.
- PHP header (función header de PHP).
- Apache Module mod_alias, en la documentación de Apache HTTP Server versión 2.4, describe cómo pueden especificarse las redirecciones en Apache 2.4.
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.
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.