ヘッダ

前へ << GET と POST パーミッションと実行権限 >> 次へ

ヘッダとは

これまでの CGI プログラムで解説したように、 「Content-type: text/html\n」というのがヘッダです。

hello-world-2.pl

    1: #!/usr/local/bin/perl
    2: 
    3: print "Content-type: text/html\n\n";
    4: 
    5: print "<html><body>";
    6: print "Hello world.";
    7: print "</body></html>";
の例で言うと、まずヘッダ「Content-type: text/plain\n」を出力します。 そして、改行 `\n' を出力します。これはヘッダではありません。 ヘッダの終了を表す空行です。 その後にボディが続きます。

つまり、CGI プログラムは

ヘッダ
(空行=改行のみの行)
ボディ…
という出力をしなければいけない、ということです。

Content-type は必須のヘッダで、後に続くボディが どのような内容なのかを表します。以下はあくまでも一例です。

これらは IANA (Internet Assigned Numbers Authority) という機関が管理しています。 新しくファイルの種類を作った場合は、IANA に登録しておくとよいでしょう。

ただし Content-type は、ブラウザ側が解釈するものです。

その他のヘッダ

ヘッダには Content-type 以外にもたくさんの種類があり、 同時に複数のヘッダを出力することができます。 複数のヘッダを出力する場合は、
ヘッダ1
ヘッダ2
ヘッダ3
 …
ヘッダn
(空行=改行のみの行)
ボディ…
という形になります。

世の中の CGI プログラムを見渡してみると、 大抵 Content-type ヘッダしか出力していません。 CGI プログラムの性格によってはそれでも構わないのですが、 掲示板のようなものは、できるだけ Content-length ヘッダと Last-Modified ヘッダ を出力すべきです。

Content-Length

Content-length は、データの長さがどれだけかを表します。 ブラウザで読み込み途中に「45% 読み込み」や「あと xx 秒」という表示を 見たことがあるでしょうが、Content-length ヘッダを出力しないと これらの情報は表示されません。 結果的に、Content-length ヘッダを出力することで、 読み込み時のユーザの体感時間を減少させることができます。

しかし、CGI プログラムは動的に内容を変更するものなので、 ボディを出力する前にボディの長さを知るのは困難です。

Last-Modified

Last-Modified ヘッダとは、最終更新時刻のことです。 時刻の形式はいくつか種類がありますが、
Last-Modified: Mon, 06 May 1996 04:12:35 GMT
という形式が最も一般的です。 これを出力すると、転送量が大きく減少します。 なぜなら Last-Modified ヘッダを受け取ったブラウザは、 次回同じページにアクセスしたときに、 If-Modified-Since というリクエストヘッダを送ります。

大文字と小文字

ヘッダ名は case-insensitive です。 つまり、大文字小文字は区別されません。
コンピュータ業界では、大文字小文字を区別しないことを case-insensitive、 逆に大文字小文字を区別することを case-sensitive と言います (一般的な英語なのかなぁ?)。
ですから、Content-type、Content-Type、CONTENT-type、CoNtEnT-tYpE は 全て同じ意味です。 ただし過去のブラウザでは Content-type でないとダメ、というバグがありました。 ヘッダを解釈するのはブラウザであることを考えると、 あまり CoNtEnT-tYpE のような奇抜なヘッダ名は使わない方がよいでしょう。

前へ << GET と POST パーミッションと実行権限 >> 次へ

$Id: header.html,v 1.3 2004/06/12 02:03:10 68user Exp $