SSI

前へ << サーバ設定と .htaccess C 言語で CGI プログラムを作ろう >> 次へ

SSI とは

SSI とは Server Side Include の略です。 特定の文字列を HTML 内に書いておくことで、 リクエストがあるたびに WWW サーバが変換してくれます。

WWW サーバが変換してからブラウザに送信するので、 普通 閲覧者は、SSI を使っているのか、それとも元々 HTML 内に 記述されていたのかは知ることができません。 例えば、http://X68000.q-e-d.net/~68user/ にはカウンタが付いています。 しかし、その数字が元々書かれていたものか、それとも SSI で表示しているのかは わからないでしょう。

SSI で可能なことは

です。

SSI の設定方法

SSI を使用できるかどうかは、サーバの設定によります。 お使いのプロバイダのドキュメントを読んで下さい。

一般論としては、まず、foo.html に

<HTML><BODY>
SSI TEST 
<!--#exec cmd="/bin/echo OK"-->
</BODY></HTML>
と書きます。そして foo.html にアクセスします。 http://X68000.q-e-d.net/~68user/webcgi/sample/ssi.html のように、
SSI TEST OK
と表示されたら、SSI は正常に動いています。

もしうまく動かなかったら、~/public_html/.htaccess に

Options +Includes
を追加します (このファイルがなかったら新規作成して下さい)。これでもダメなら ~/public_html/.htaccess に
Options +Includes
AddHandler server-parsed .html
とします。これで動かなければ SSI は使えません。あきらめて下さい。
apache+suExec だと、これではダメらしい。現在調査中。

SSI と Last-Modified・Content-length ヘッダ

SSI は、リクエストがあるたびにコマンドを実行したり、 ファイルを取り込んだりします。 そのため、最終更新時刻を表す Last-Modified ヘッダや、 データの長さを表す Content-length ヘッダが付きません。

しかし、XBitHack を使うことで Last-Modified ヘッダだけは付けることができます。 .htaccess に

XBitHack full
と書いて、さらに SSI を使っているファイルに実行権限を付けます (パーミッションを 755 にする)。

すると、 http://X68000.q-e-d.net/~68user/webcgi/sample/ssi-xbithack.html のように最終更新時刻が表示されます。

SSI カウンタを使っている場合を例に、XBitHack の意味を説明します。 普通、ブラウザが WWW サーバにコンテンツ転送を要求する際は、 GET メソッドを使います。GET メソッドが起こる度に SSI が実行されます。

普通、ブラウザは ブラウザは一度アクセスしたコンテンツはキャッシュを保存します。 再度訪問するときは If-Modified-Since ヘッダを送ります。 これは、

「うちは〜の時点のキャッシュを持っているのだが、 もしそれ以降更新されていたら新しいものを送ってくれ。もし更新されていないなら、 送らなくて結構」
という意味です。WWW サーバは SSI を使っているので、 最終更新時刻が取得できません。そのため毎回「更新されてるよ」と返事を出し、 その度に SSI カウンタが実行されてしまいます。

一方 XBitHack を設定すると、WWW サーバは最終更新時刻を取得できるようになります。 そのため、ブラウザが If-Modifed-Since を送ってきたとき、 If-Modified-Since の時刻とコンテンツの最終更新時刻を比較し、 「更新されてません。そっちで保存しているキャッシュを使ってね」 と答えます。このとき SSI カウンタは実行されないのです。

結果として、XBitHack を設定するとアクセス数が激減するでしょう。 うちの web では 500/day を越えていたアクセス数は、 XBitHack を設定すると 250/day と半減しました。 UNIX の部屋のアクセスカウンタ

前へ << サーバ設定と .htaccess C 言語で CGI プログラムを作ろう >> 次へ

$Id: ssi.html,v 1.6 2004/06/28 15:51:45 68user Exp $