mod_html_metaを使ってみる

Re: XHTML1.1のMIMEタイプで、「『meta要素を解析してその通りにHTTPヘッダを出力するサーバ』があるというのもあまり聞かないような」、などと無知なことを書いたところ、いわいさんよりApacheでの実装があるとのこと。

あまり聞かないような」に異論がある訳ではなく単なる FYI なのですが、Apache 用モジュールで mod_html_meta という実装はあります。試したことはないのですけど。

情報感謝です。ずっと「そのようなサーバの機能があるか」という観点で調べていたので、Apacheのモジュールを探すことには気付いていませんでした。ということでApacheのモジュール追加は初体験ながらも、自宅のCygwin + Apacheで実験。

  1. http://www.yoshidam.net/mod_xml_charset-0.1.5.tar.gz よりソースをダウンロードして展開。

  2. 説明の通りに apxs -c mod_html_meta.c でコンパイルしてみる。

  3. 途中でエラーになってしまった。

    $ apxs -c mod_html_meta.c
    gcc -DCYGWIN -DUSE_HSREGEX -DEAPI  -DSHARED_CORE -DSHARED_MODULE -I/usr/include/
    apache  -c mod_html_meta.c
    mod_html_meta.c:134: conflicting types for `strndup'
    /usr/include/string.h:63: previous declaration of `strndup'
    apxs:Break: Command failed with rc=1
  4. strndupという名前が衝突しているようなので、mod_html_meta.c の中の"strndup"を試しに"strnndup"と書き換えてみる(←いいのか)。

  5. それで再度コンパイルしてみると最後まで通って、mod_html_meta.dll ができた。

  6. できたdllを、apxs -i -a mod_html_meta.dll でインストール。

  7. httpd.confにmod_html_metaモジュールが追加されたことを確認し、Apache再起動。

  8. .htaccessに以下2行を追記。

    HTMLMeta on
    AddHTMLMeta html

んでもって手打ちtelnetでApacheサーバにHEADリクエストを出してみると……あ、確かにmeta要素での指定が反映されましたよ。

$ telnet localhost 80
Trying 127.0.0.1...
Connected to croquis.
Escape character is '^]'.
HEAD /kits/tanpen/ HTTP/1.0

HTTP/1.1 200 OK
Date: Thu, 29 May 2003 14:47:11 GMT
Server: Apache/1.3.24 (Cygwin)
Content-Script-Type: text/javascript           ←このへん
Content-Style-Type: text/css                   ←
Last-Modified: Mon, 26 May 2003 15:39:44 GMT
Connection: close
Content-Type: text/html; charset=Shift_JIS     ←

Connection closed by foreign host.

meta要素の指定で、Content-Typeまでも変更できるのかどうかが一番気になるところだったのですが、それも問題なくできていました。うーむすごい。ただし、meta要素をSSIで追加している場合だと、さすがにその部分の指定は反映できないようでした。

で、しばらくmeta要素の指定でtext/plainにしてHTMLソースをそのまま表示させてみたりとか、image/jpegにして「画像にエラーがあるよ」とエラー表示させてみたり(Mozillaにて)などして遊んでいました。

※コンパイルのしかたについてはもっといい方法がありそうな気がしますが……。

(2003年5月30日)

北村曉 kits@akatsukinishisu.net