Server-seitige Techniken, einschließlich server-seitiger Scripting-Sprachen und Server-Konfigurationsdateien mit URLs oder URL-Pattern für Weiterleitungen.
Die Technik bezieht sich auf:
Das Ziel dieser Technik ist es, Verwirrungen zu vermeiden, die dadurch verursacht werden können, wenn zwei neue Seiten in schneller Abfolge geladen werden, weil eine Seite (diejenige, die vom Benutzer angefordert wurde) zu einer anderen weiterleitet. Einige Benutzeragenten unterstützen die Benutzung des HTML meta
-Elements, um den Benutzer nach einer festgelegten Anzahl an Sekunden zu einer anderen Seite weiterzuleiten. Dies führt dazu, dass die Seite für einige Benutzer nicht mehr barrierefrei ist, besonders für Benutzer mit Screenreadern. Server-seitige Techniken stellen Methoden zur Verfügung, um Weiterleitungen auf eine Art zu implementieren, die Benutzer nicht verwirrt. Ein server-seitiges Script oder Konfiguration kann dazu führen, dass der Server eine entsprechende HTTP-Antwort mit einem Status-Code im 3xx range und einen Location header mit einer anderen URL sendet. Wenn der Browser diese Antwort erhält, ändert sich die Adressleiste und der Browser macht eine Anfrage mit dem neuen URL.
In Java Servlets oder JavaServer Pages (JSP) können Entwickler HttpServletResponse.sendRedirect(String url)
benutzen.
Code-Beispiel:
…
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
…
response.sendRedirect("/newUserLogin.do");
}
Dies sendet eine Antwort mit einem 302 Status-Code („Found“) und einen Location header mit dem neuen URL an den Benutzeragenten. Es ist auch möglich, einen anderen Status-Code mit response.sendError(int code, String message)
festzulegen, wobei eine der Konstanten in der Benutzerschnittstelle javax.servlet.http.HttpServletResponse als Status-Code definiert wird.
Code-Beispiel:
…
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
…
response.sendError(response.SC_MOVED_PERMANENTLY, "/newUserLogin.do");
}
Wenn eine Anwendung HttpServletResponse.encodeURL(String url)
zum Umschreiben von URLs benutzt, weil die Anwendung von Sitzungen abhängig ist, sollte die Methode HttpServletResponse.encodeRedirectURL(String url)
statt HttpServletResponse.sendRedirect(String url)
benutzt werden. Es ist außerdem möglich, einen URL mit HttpServletResponse.encodeURL(String url)
umzuschreiben und diesen URL dann an HttpServletResponse.sendRedirect(String url)
zu übergeben.
In Active Server Page (ASP) mit VBScript können Entwickler Response.Redirect
benutzen.
Code-Beispiel:
Response.Redirect "newUserLogin.asp"
oder
Code-Beispiel:
Response.Redirect("newUserLogin.asp")
Der unten stehende Code ist ein vollständigeres Beispiel mit einem bestimmten HTTP Status-Code.
Code-Beispiel:
Response.Clear
Response.Status = 301
Response.AddHeader "Location", "newUserLogin.asp"
Response.Flush
Response.End
In PHP können Entwickler einen raw HTTP header mit der header
-Methode senden. Der unten stehende Code sendet einen 301 Status-Code und eine neue Adresse. Wenn der Status nicht explizit festgelegt wird, sendet die Weiterleitungs-Antwort einen HTTP Status-Code 302.
Code-Beispiel:
<?php
header("HTTP/1.1 301 Moved Permanently);
header("Location: http://www.example.com/newUserLogin.php");
?>
Entwickler können den Apache Web Server so konfigurieren, dass er Weiterleitungen wie in dem folgenden Beispiel verarbeitet.
Code-Beispiel:
redirect 301 /oldUserLogin.jsp http://www.example.com/newUserLogin.do
Ressourcen sind nur zu Informationszwecken und keine offizielle Empfehlung.
Use standard redirects: do not break the back button! (W3C QA Tip).
HTTP 301 Permanent Redirection Techniques von Shailesh N. Humbad.
Interface javax.servlet.http.HttpServletResponse in the Java Servlets 2.3 API documentation.
header in the PHP Manual.
Apache Module mod_alias in der Apache HTTP Server Version 2.2 Documentation beschreibt, wie man Weiterleitungen Apache 2.2 spezifizieren kann.
Module mod_alias in der Apache HTTP Server Version 1.3 Documentation beschreibt, wie man Weiterleitungen in Apache 1.3 spezifizieren kann.
(derzeit keine aufgelistet)
Finden Sie jeden Link oder programmtechnische Referenz zu einer anderen Seite oder Webseite.
Prüfen Sie für jeden Link oder jede programmtechnische Referenz zu einem URI in der Reihe der zu evaluierenden Webseiten, ob die referenzierte Webseite Code enthält (z.B. meta-Element oder Script), der dazu führt, dass eine client-seitige Weiterleitung ausgelöst wird.
Prüfen Sie für jeden Link oder jede programmtechnische Referenz zu einem URI in der Reihe der zu evaluierenden Webseiten, ob der referenzierte URI keine Weiterleitung ODER eine server-seitige Weiterleitung ohne Zeitlimit auslöst.
Schritt 2 ist falsch UND Schritt 3 ist wahr.
Wenn dies eine ausreichende Technik für ein Erfolgskriterium ist, dann bedeutet das Scheitern an diesem Testverfahren nicht zwangsläufig, dass das Erfolgskriterium nicht auf irgendeine andere Art und Weise erfüllt wurde, sondern nur, diese Technik nicht erfolgreich implementiert wurde und nicht benutzt werden kann, um die Konformität zu erklären.