HTTPリダイレクトはありか

 私は、HTTPリダイレクト(HTTPヘッダに「Location:」と出すやつ)を使うのが嫌いである。というのも、画面遷移をクライアント側に依存するからである。しかしこれは、ディスパッチ機構に決定打のないCGIにおいてディスパッチの代わりに使われることが多いように思える。
 ところが、リダイレクトとディスパッチに大きな隔たりがある。まず、前述のようにリダイレクトはクライアントが行うと言うことである。また、POSTリクエストの場合、リダイレクト先にもクエリを送ってしまう。つまり、標準入出力のリダイレクトと同じで、クライアント側からみた出力先を変えるというのが本来の姿なのである。また、リダイレクト先のプログラムは、それ単体でも呼び出すことが可能なので、こちらにもGETやPOSTで渡されてきたパラメータチェックを要する。それに対してディスパッチは、サーバ側で行う。クライアントサイドはディスパッチされたこともわからないので、当然リダイレクトのようにクエリが二度送信されることもない。また、ディスパッチ先のプログラムはそれ単体では呼び出せないように作ることもできるので、パラメータを厳重にチェックする必要もない。Javaならばアサーションでも差し込んでおけば十分であろう(つまり、異常なパラメータが来るのはバグと言うことだ)。
 以上のことから、いかにリダイレクトが不便かがうかがい知れたかと思う。では、ディスパッチ機構に決定打がないCGIはどうすればいいのか。悩ましいところである。