attohttpD 0.1.4

since: 2003-11-22 update: 2004-11-04 count:

attohttpD は小規模でも無くなってきたウェブサーバです。

とりあえず使ってみるには

ダウンロードして、展開して下さい。

Linux なら make して、./attohttpd として下さい。 コンパイルには DMD-0.81 以降または gdc が必要です。 Windows なら attohttpd.exe をダブルクリックして下さい。

で、 このリンク を辿ります。 (attohttpD が起動していない時は辿れません) 適当に設定したら Windows なら DOS窓を消す、Linux なら ^c などして、 attohttpd を殺し、 attohttpd.yml と attohttpd.exe を Webサーバのドキュメントルートにしたいディレクトリに移動して、 できあがり。

後は Webサーバが利用したい時はその attohttpd.exe を実行して下さい。 DOS窓とブラウザが出てくると思います。DOS窓を消せば終了します。 ブラウザがこの html と同内容のものを表示していない場合は、 もう一度起動してみてください。

とりあえず何に使うものかを知りたい人は、 機能の項目をすっとばして、 想定されている利用法の項目を見て下さい。

機能

機能として、以下のようなものがあります。

YAML ファイルによる設定

設定は起動されたディレクトリにある attohttpd.yml でなされます。 引数が渡された場合はそのファイルを YAML ファイルであるとして読みます。

起動したディレクトリ以下にあるファイルの公開

一応 httpd ですので。 apache の DOCUMENT_ROOT にあたるものは設定できません。 (特に理由は無いのですけど、必要を感じなかったので)

index.html の表示

ディレクトリが指示された場合は attohttpd.yml の DirectoryIndex で指示された別のファイルを表示します。

ディレクトリリスティング

index.html が無い場合はディレクトリのリストを表示します。

この機能は -version=USE_DIRECTORY_RESPONSER を 付けずにコンパイルすることによってとり外すことができます。

CGI

attohttpd.yml の CgiSuffix で示された拡張子のファイルが要求されると、 そのファイルを実行して結果をクライアントに返します。

attohttpd.yml の EnableCgiResponser を 0 にするとこの機能をオフにすることができます。

現状、Windows環境では今一つ不安定な感じです。

YAML編集

Webサーバに組込まれた CGI によって、 YAMLファイルを Webインターフェイスで編集することができます。

attohttpD の設定ファイルは YAML で書かれていますので、 attohttpD はブラウザで自身の設定を行うことができます。 具体的な使い方は attohttpd.yml, attohttpd.yml.html を参照して下さい。

attohttpd.yml の EnableYamlResponser を 0 にするとこの機能をオフにすることができます。

設定ファイル編集

Webサーバに組込まれた CGI によって、 Java の properties のような、 キーと値がなんらかのセパレータで区切られたファイルを Webインターフェイスで編集することができます。

具体的な使い方は conf.rc, conf.rc.html を参照して下さい。 ちなみにこのファイルは拙作白い弾幕くんの設定ファイルです。

attohttpd.yml の EnableRcResponser を 0 にするとこの機能をオフにすることができます。 RcSeparator によってセパレータ文字列を変更することができます。

Proxy 機能

Proxy 機能が実装されています。 ResponseFilter, GzipFilter とともに使用すると、 フィルタプロキシとして動作します。

attohttpd.yml の EnableProxyResponser を 0 にするとこの機能をオフにすることができます。

時間制限による自動シャットダウン

いつまでもポートを占有していると困る場合、 指定した時間で自動的に attohttpD をシャットダウンさせることができます。

attohttpd.yml の Uptime という項目で設定することができます。 Uptime を -1 に設定すると無限に使用することができます。

システムに対する要求

http://localhost<:port>/sys/kill にアクセスすると終了します。

外部からのアクセスの拒否

外部からのアクセスを拒否することができます。

attohttpd.yml の DenyExternal を 0 以外にすると この機能をオンにすることができます。

拡張子による Content-Type 設定

拡張子によって返す Content-Type ヘッダを変更することができます。

attohttpd.yml の ContentType を参照下さい。

起動時ブラウザ起動

Windows版は起動時にブラウザを起動することが可能です。 attohttpd.yml の WindowsBrowserChain の項目を見ればわかると思います。 現状たまにタイミングの問題で失敗してしまうという問題があります。

制限

制限として、以下のようなものがあります。

一般に公開することはまずできない。

もちろん、できることはできるのですが、 セキュリティに全く気を配っていないため、 一般に公開するウェブサーバとしては不適です。

完全に RFC2616 に従っていない。

実装がめんどうな部分には従っていません。 また、HTTP/1.1 には対応しておらず、 keep-alive 接続などができません。

仕様については memo.txt に雑なメモがあります。

CGI が使用できる環境変数が少ない。

REQUEST_METHOD, QUERY_STRING, CONTENT_LENGTH しか使えません。

将来的にこの制限は緩和しようと考えています。

スレッド化されていない

同時に複数のレスポンスを受け付けられません。 これは proxy としては致命的なので次回修正します。

想定している利用法

配布物の簡易設定ツールとして

ゲームなんかを配ってますと、 その設定ファイルを GUI でいじりたいという要求はよく聞かれます。 しかし、ゲームに GUI を組込むのはかなり面倒ですし、 外部設定ツールを用意するのもそれなりに面倒ですし、 それをクロスプラットホームにするのはさらに大変です。

そこで、ブラウザのフォームという十分に実績があり、 様々な環境で動作するであろうツールを利用してしまえ、 という発想です。

ていうかそのために作りました。

実験用の環境として

Windows にデフォルトで Webサーバが入っていないことに Windows ユーザはもっと怒るべきだと思うのですけど、 CGI の試験など、httpd はあるといろいろ便利です。

ちなみに、機能が少ないからあたり前ですが、 apache よりも高速で、 メモリ使用量も少なく、 実行ファイルサイズも小さいです。

その他

HTTP ってのは御存知の通りわかりやすくて色々面白いプロトコルです。 まあ色々といじって遊べる httpd が欲しかったのも開発動機です。

将来的に

Proxy 動作

をもう少し改善したいと思っています。 具体的には request の変更、 HTML をパースして form の前回値保持など。

Lua の組込み

は考えている最中です。 lightweight 言語とはいえ、かなり大きくなってしまいますし、 設定ツールとしての CGI を lua で書きたいだけなら luaインタプリタを一緒に配布すれば良いことなので。

ただ servlet的な httpd と密接な関係を 持った利用法がありそうだったらぜひやってみたいと思っています。

技術的には

D 言語を使っています

http://www.digitalmars.com/d/

make unit

で unit test が動きます。 Win32 ではうまく動かないと思います。

pipe.d がプロセスの標準入出力両方奪えるストリームとして使えるでしょう。 Windows版は Ruby のソースからいただきました。

こちら の Windows のヘッダ群を使わせて頂いています。

YAML を使っています

YAML の公式サイト

parse, dump には bogoYAML を利用してます。

socket.d を使っています。

最新はこちらかな

zlib を使っています。

公式サイト

コンパイル

Linux なら make 、Windows なら cd src; make -f Makefile.win32 。 GNU make じゃないと多分ダメです。 Windows の SDL_net.lib は implib で作って下さい。

Makefile をいじれば各機能をとり外せます。 しかしどちらにせよある程度サイズが大きいので、 あまり意味が無いようです。

拡張性

Responser, Filter 継承クラスを作れば拡張が割と簡単にできます。


home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h