WCAG 2.0 達成方法集

Skip to Content (Press Enter)

-

SVR1: クライアントサイドではなく、サーバサイドで自動リダイレクトを実装する

達成方法に関する重要な情報

これらの達成方法(参考)の使用法及び、それらがWCAG 2.0 達成基準(規定)とどのように関係するかに関する重要な情報については、WCAG 達成基準の達成方法を理解するを参照のこと。適用(対象)セクションは、その達成方法の範囲について説明しており、特定の技術に関する達成方法があるからといって、WCAG 2.0 を満たすコンテンツを作成する際に、常にその技術が使用可能であるわけではない。

適用(対象)

サーバーサイド・スクリプト言語、及びリダイレクトためのURL又はURLパターンのあるサーバ環境設定ファイルを含む、サーバーサイドのウェブコンテンツ技術

これは、次の達成基準に関連する達成方法である:

解説

この達成方法の目的は、あるページ(利用者によって要求されたページ)が別のページにリダイレクトされたために、2つの新しいページが間断なく読みこまれることによって引き起こされる混乱を回避することである。いくつかのユーザエージェントは、利用者を指定された秒数の後に別のページにリダイレクトするHTMLのmeta要素の使用をサポートしている。これは、一部の利用者、特にスクリーンリーダーを使用している利用者にとって、ページをアクセシブルではないものにしている。サーバーサイドのウェブコンテンツ技術は、利用者を混乱させないリダイレクトを実装する方法を提供している。サーバーサイド・スクリプト又はサーバ環境設定ファイルで、3xx番台のステータスコード、及び転送先のURLのLocationヘッダーを持つ適切な HTTPレスポンスをサーバが送るようにできる。ブラウザがこのレスポンスを受けると、ロケーションバーが変わり、ブラウザは新しいURLのリクエストをする。

事例

事例 1: JSP/サーブレット

Java サーブレット又はJavaServer Pages(JSP)では、開発者は HttpServletResponse.sendRedirect(String url) を使用できる。

コード例:

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

このコードは、302ステータスコード(「Found」)及び新しいURLのLocationヘッダーを含むレスポンスをユーザエージェントに送る。また、response.sendError(int code, String message) で、ステータスコードとしてインタフェース javax.servlet.http.HttpServletResponse で定義されている定数の一つを用いて、別のステータスコードに設定することも可能である。

コード例:

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

アプリケーションがセッションに依存するために、アプリケーションがURLのリライトに HttpServletResponse.encodeURL(String url) を使用するなら、メソッド HttpServletResponse.encodeRedirectURL(String url)HttpServletResponse.sendRedirect(String url) の代わりに使用されるべきである。また、HttpServletResponse.encodeURL(String url) でURLをリライトして、それから HttpServletResponse.sendRedirect(String url) にこのURLを渡すことも可能である。

事例 2: ASP

VBScriptで書かれたActive Server Page(ASP)では、開発者は Response.Redirect を使用できる。

コード例:


Response.Redirect "newUserLogin.asp"

又は

コード例:

Response.Redirect("newUserLogin.asp")

以下のコードは、特定のHTTPステータスコードを含む、より完全な例である。

コード例:

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

事例 3: PHP

PHPでは、開発者は header メソッドで生のHTTPヘッダーを送ることができる。以下のコードは、301ステータスコードと新しい場所を送る。ステータスが明示的に設定されないなら、リダイレクトのレスポンスはHTTPステータスコード302を送る。

コード例:


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

事例 4: Apache

以下の例のようにして、開発者は Apache ウェブサーバがリダイレクトを処理するように構成できる。

コード例:

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

参考リソース

この参考リソースは、あくまでも情報提供のみが目的であり、推薦などを意味するものではない。

(今のところ、なし。)

検証

チェックポイント

  1. 別のウェブページへのリンク又はプログラムによる参照を見つける。

  2. ウェブページ一式におけるURIのリンク又はプログラムによる参照において、参照されたウェブページがクライアントサイド・リダイレクトを引き起こすコード(例えば、meta要素又はスクリプト)を含んでいない。

  3. ウェブページ一式におけるURIのリンクやプログラムによる参照において、参照されたURIがリダイレクトしない、又は、一時停止なしのサーバーサイド・リダイレクトをしない。

判定基準

この達成方法が「十分な達成方法」の一つである場合、このチェックポイントや判定基準を満たしていなければ、それはこの達成方法が正しく用いられていないことを意味するが、必ずしも達成基準を満たしていないことにはならない。場合によっては、別の達成方法によってその達成基準が満たされていることもありうる。