前回インストールした Apache httpd 2.4.2 の configure のオプション でさりげなく指定した --enable-data は、2.4 から利用可能な mode_data を用意します。URI の指定する画像ファイルを RFC2397 の data: 形式のURI に変換する機能のようです。
とすれば、ここの設定では、/usr/local/httpd242/htdocs/data/images の下の小さな画像を data: 形式に変換してくれます。
具体的な例として、/usr/local/httpd242/conf/httpd.conf の中で、
を指定します。
早速試してみます。素材は、無料のボタンやアイコンを提供されている、
「ネットショップ素材.com」
http://www.shop-sozai.com/
から2つのイメージ、
http://www.shop-sozai.com/hit/img/hit01.gif
http://www.shop-sozai.com/hit/img/hit05.png
を取り寄せました。これを所定のディレクトにコピーします。
# cp hit01.gif hit05.png /usr/local/httpd242/htdocs/data/images
このcoLinux のホスト名は、fedora14 ですから、ブラウザで直接以下のURIをアクセスしてみます。
http://fedora14/data/images/hit01.gif
ブラウザに次のような結果が返ってきます。(改行してあります。)
data:image/gif;base64,R0lGODlhLQAtALMAAMwAAOaAgNIgIP////LAwNl
AQOJwcOuZmfXNzdYwMM8QEAAAAAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAAAt
AC0AAATPMIEJkqSW1jsz5pvmgV5HniL6aWzrvnAsz3Rt33iOq2bqr8Be5Scsh
oJHo27JbDqf0CcvSS1VVVOrNjuNer/gsKhQUEzIhTMZIEC7CwLYFDEYpAH1wS
QPCOT/AwdYRAB0dnt1iHp+gHWChDAEdXd8eIkUjAFOko16lp4TmZudnpWhdZp
NnAZklaZ9qDNzk4q1FAexVx2EhpSXr7gDqVs0nL6ll6fCYszNzjuExEjSQlzR
1kjP2tvczNhG1LpD09/iSt3o6eo25eHuF+3xkOoRADs=
同様に、
http://fedora14/data/image/hit05.png
はこのようになります。(改行してあります。)
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADF
eBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RV
(以下省略)
たしかにタイプは識別されて変換されています。ちなみに、
Content-Type: text/plain
として値が返ってきますので、ブラウザにこの URI がそのまま表示されてしまうことになります。この変換された URI を利用して、html ファイルの中に、img タグを次のように指定します。
<img alt="Hit"
src="data:image/gif;base64,R0lGODlhLQAtALMAAMwAAOaA......">
ブラウザで見ると、確かに画像が表示されます。注意したいのは、
<img alt="Hit" src="http://fedora14/data/images/hit01.gif">
と指定してしまうと、画像データではなくて変換されたURIが返ってきてしまうのでブラウザではイメージは表示されずに alt で指定した文字列が表示されることです。つまり通常の方法では、このディレクトリの下の画像を表示することは出来なくなります。
変換されるタイミングは、httpd に対して、
GET /data/images/hit01.gif HTTP/1.1
が要求された時のようで、その時変換された URI が返却されます。
SSI でこれを利用しようとして、例えば、
<img src="<!--#include virtual="/data/images/hit01.gif" -->" alt="Hit">
と指定しても、結果はこのフィルタを通らず直接画像データが src= の直後に挿入されるだけでこの機能は使えません。というわけで、この機能と SSI(mod_include) を使って何か出来るという予想は間違いのようです。
以上の点から実際にこの機能が何に使えるのかはよく分かりませんでした。
<Location /data/images> SetOutputFilter DATA </Location>
とすれば、ここの設定では、/usr/local/httpd242/htdocs/data/images の下の小さな画像を data: 形式に変換してくれます。
具体的な例として、/usr/local/httpd242/conf/httpd.conf の中で、
LoadModule data_module modules/mod_data.so
<IfModule data_module> <Location /data/images> SetOutputFilter DATA </Location> </IfModule>
を指定します。
早速試してみます。素材は、無料のボタンやアイコンを提供されている、
「ネットショップ素材.com」
http://www.shop-sozai.com/
から2つのイメージ、
http://www.shop-sozai.com/hit/img/hit01.gif
http://www.shop-sozai.com/hit/img/hit05.png
を取り寄せました。これを所定のディレクトにコピーします。
# cp hit01.gif hit05.png /usr/local/httpd242/htdocs/data/images
このcoLinux のホスト名は、fedora14 ですから、ブラウザで直接以下のURIをアクセスしてみます。
http://fedora14/data/images/hit01.gif
ブラウザに次のような結果が返ってきます。(改行してあります。)
data:image/gif;base64,R0lGODlhLQAtALMAAMwAAOaAgNIgIP////LAwNl
AQOJwcOuZmfXNzdYwMM8QEAAAAAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAAAt
AC0AAATPMIEJkqSW1jsz5pvmgV5HniL6aWzrvnAsz3Rt33iOq2bqr8Be5Scsh
oJHo27JbDqf0CcvSS1VVVOrNjuNer/gsKhQUEzIhTMZIEC7CwLYFDEYpAH1wS
QPCOT/AwdYRAB0dnt1iHp+gHWChDAEdXd8eIkUjAFOko16lp4TmZudnpWhdZp
NnAZklaZ9qDNzk4q1FAexVx2EhpSXr7gDqVs0nL6ll6fCYszNzjuExEjSQlzR
1kjP2tvczNhG1LpD09/iSt3o6eo25eHuF+3xkOoRADs=
同様に、
http://fedora14/data/image/hit05.png
はこのようになります。(改行してあります。)
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADF
eBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RV
(以下省略)
たしかにタイプは識別されて変換されています。ちなみに、
Content-Type: text/plain
として値が返ってきますので、ブラウザにこの URI がそのまま表示されてしまうことになります。この変換された URI を利用して、html ファイルの中に、img タグを次のように指定します。
<img alt="Hit"
src="data:image/gif;base64,R0lGODlhLQAtALMAAMwAAOaA......">
ブラウザで見ると、確かに画像が表示されます。注意したいのは、
<img alt="Hit" src="http://fedora14/data/images/hit01.gif">
と指定してしまうと、画像データではなくて変換されたURIが返ってきてしまうのでブラウザではイメージは表示されずに alt で指定した文字列が表示されることです。つまり通常の方法では、このディレクトリの下の画像を表示することは出来なくなります。
変換されるタイミングは、httpd に対して、
GET /data/images/hit01.gif HTTP/1.1
が要求された時のようで、その時変換された URI が返却されます。
SSI でこれを利用しようとして、例えば、
<img src="<!--#include virtual="/data/images/hit01.gif" -->" alt="Hit">
と指定しても、結果はこのフィルタを通らず直接画像データが src= の直後に挿入されるだけでこの機能は使えません。というわけで、この機能と SSI(mod_include) を使って何か出来るという予想は間違いのようです。
以上の点から実際にこの機能が何に使えるのかはよく分かりませんでした。