Tips

SEND HTTP REDIRECTの使い道

日付2008/02/07
ID08-004
バージョンAll
プラットフォームMac & Win

SEND HTTP REDIRECTは4Dで何か処理した結果、ブラウザをを他のサーバに接続させたい時に使います。しかし他にも思わぬ効用があります。

4Dの問題ではありませんが、ブラウザに表示させた入力フォームで入力値をブラウザからサーバに送信させているとき、ブラウザの最読み込みなどの操作によって、同じ入力値がブラウザから送られてきてしまうことがあります。特にACTIONにPOSTを指定している時に発生します。こうしたことを避ける目的で、一般的にリダイレクトが利用されることがあります。

再読み込みボタンが押されたとき、ブラウザは表示しているページを表示した時と同じリクエストをWebサーバに送信します。もし、そのページがPOST命令によって送信された結果、表示されたページである時に再読み込みボタンが押されたときは、ブラウザは再度同じデータをPOST命令とともに送信します。一般的にWebデザインにおいて、こうしたことを防ぐ目的でリダイレクトを利用します。

ブラウザから入力データが送られてきたとき、直接結果をページとして送信するのではなく、代わりにリダイレクト要求をブラウザに送信します。するとブラウザはページを表示することなく再度リダイレクト要求に従ったリクエストをWebサーバに送信します。順を追って箇条書きにすると…

  1. ブラウザから入力データがリクエストともに、Webサーバに送られてくる
  2. Webサーバは、このリクエストに対してページを送信する代わりに次にアクセスするべきURLをブラウザに、リダイレクト要求とともに送り返す
  3. ブラウザはリダイレクトを受け取り、ページを表示することなく指定されたURLでWebサーバにリクエストを送信する
  4. Webサーバは、このリクエストに対してページを送信する
  5. ブラウザは、受け取ったページを表示する

このようなやり取りの後では、もし再読み込みボタンが押されたときには、3番目のリクエストを再送信するだけです。このようにリダイレクトは重複データの送信を防ぐ目的でしばしば利用されます。

4Dでブラウザにリダイレクト要求を送信する時には、SEND HTML TEXTなどの代わりに、SEND HTTP REDIRECTを利用するだけです。

注意しなければならないのは、全てのブラウザが、このような動作を行わないことです。例えば携帯電話に搭載されているブラウザの中には、こうした動作を期待できないものが多くあります。ブラウザ側の動作は、ある程度予想はできるものの、Webサーバ側から完全なコントロールを行うことはできません。それでも、リダイレクトは多くの場合有意義に動作すると思います。