Browserに他ページをアクセスさせるHTTP-Headerです。
イメージマップのところでも説明しましたが、CGIの一番最初の出力で
printf("Location: http://www.hongo.ecc.u-tokyo.ac.jp/index.html\n\n");
と、Location: 絶対URLの行に続いて空行を出力すると、browserはこのCGI とのコンタクトを中止して指定されたURLのページをアクセスする作業に 移ります。つまり閲覧者から見ると、このCGIにアクセスした途端にこの URLのページが表示されるのです。
これの利用例はまさにイメージマップのような使い方ですが、他の利用例 としてはlink先がころころ変わるような機構とか、FORMデータを受理して、 すぐにもとのページに戻らせるような機構の実現のために使われます。
browserの表示を更新させない HTTP-Headerです。
Location HTTP-Headerと同様にCGIの一番最初の出力で
printf("Status: 204 No Response\n\n");
と出力すると、本来ならこのCGIの出力するページに表示が切替わる ところを切替えません。つまりlinkをクリックしても まるで変化しないという機構ができるのです。
この機構は例えば、FORMデータを受け取るCGIで、受理したことを報告する
必要がまるで無い場合に使われるようですが、見る側としてはこれでは
何が起こったのかわからず不安になるのでやめましょう。
それとも極秘にデータを集計する機構に使えるでしょうか。
イメージマップの裏にこれを仕掛けておけば、人がどこを叩くかの集計が
秘密裏に行えます。変な例ですが工夫次第でなにかの役にたつでしょう。
Browserにそのページの情報を cacheに保存しないことを指定する
HTTP-Headerです。またHTMLタグとして普通のHTMLページで指定することも
できます。
HTTP-Headerとして使う場合にはLocation HTTP-Headerなどとは異なり
Content-typeの指定行の次の行で指定します。すなわち
またはprintf("Content-type: text/html\n"); printf("Expires: 0\n\n");
とします。普通のHTMLページで指定するにはHEADタグ内でprintf("Content-type: text/html\n"); printf("Pragma: no-cache\n\n");
とすることにより、これらのページの情報は browserのcacheに保存 されません。<HEAD> <META HTTP-EQUIV="Expires" CONTENT="0"> </HEAD>
ここでcacheの効果についておさらいしましょう。
BrowserはページのURLとその中身をメモリやディスクの中に一時保管 します。その保管領域をcacheと呼びます。特にURLを保管する領域は historyと呼ばれます。そのデータを元に次のような動作をします。
このようにcacheは無駄なアクセスを減らすために使われるのですが CGIへのアクセスに関してはこれがかえって邪魔になります。 CGIはアクセスするたびに変化するページを作るための機構なのですが cacheが働くとアクセスしないで前のデータをそのまま表示するので ページが更新されないのです。
リンクでページを進める場合には、 browserはある程度自動的にページを再アクセスする必要性を判断します。 その判断の基準がどうなっているのか知りませんが、browserの Optionメニューである程度指定できるようです。
以上 cacheの効果の理解を踏まえると、Expires, Pragma HTTP-Header によりcacheに保管されないCGIの性質が理解できます。次のように なります。
これらの性質から、Expires, Pragma HTTP-Headerの使い道は chatなどの更新が頻繁に必要なページや、アクセスカウンタの絵柄 を出力するCGIなどに効果的でしょう。アクセスカウンタでこれを 使うと、Back/Forwordのたびにカウントすることを忘れずに。
Browserに自動的にページを更新させるHTML Headerタグです。 普通のHTMLページでも使えますし、CGIの出力としても使えます。 次のようにHTMLのHEADタグの内側で使います。
<HEAD> <META HTTP-EQUIV="Refresh" CONTENT="2"> </HEAD>
このようにHEAD内で宣言すると、このページの表示がされてから CONTENTオプションで指定された秒数の後に このページを再アクセスして表示を更新します。
さらにCONTENTオプションに次のように指定することもできます。
秒数の指定の後ろにsemicolonとwhite spaceで区切ってURLサブオプション で絶対URLを指定することにより、指定秒数後に指定のURLのページを アクセスして表示します。<HEAD> <META HTTP-EQUIV="Refresh" CONTENT="2; URL=http://www.hongo.ecc.u-tokyo.ac.jp/index.html"> </HEAD>
この機構はページを動的なものにしてくれる便利な機能なのですが ページアクセスを連発するとそれだけ browser や network や server に 負担がかかるので、使用はほどほどにしましょう。
CGIのコード種をbrowserに教えて、browserに文字化けを起こさせない HTTP-Headerの一部です。Content-typeと同時に次のように出力します。
printf("Content-type: text/html; CHARSET=x-euc-jp\n\n");
これでbrowserはページのコードが日本語EUCコードであると思って 移行の文字データを処理します。
これと似た機能をHTML Headerタグとして普通のHTMLページ内で 使ってページのコード種を指定することもできます。
しかしbrowserによっては誤作動を起こしてパニック状態になる場合もあります。 本来、ページの文字コードくらいは browser が正しく認識すべきこと なのですが、いまだに誤判定を起こすことがあります。<META HTTP-EQUIV="Content-type: text/html; charset=x-euc-jp">
HTTPd-HeaderでもHTML Header tagでもなんでも無いのですが、 ブラウザの漢字コード判定を多いに助けるおまじないです。
<!-- 漢字コードはEUC --> <HTML>
これにより、browserはページの冒頭で漢字コードを判別できます。 なぜならこの「漢字コードはEUC」の言葉の各漢字すべてが EUC独特のコードであるからです。 それでもコードの判定に失敗するようなら、それはbrowserの不良です。
クライアントに cookieを設定させるためのHTTP-Headerです。
printf("Content-type: text/html\n"); printf("Set-Cookie: name=value; expires=Man, 19-Jan-98 00:00:00 GMT; path=/~naoki/cgi-bin/\n\n" );