+----------------------------------------------------------------------------+ | Simple HTTP Server - Version 1.05 | | - 取り扱い説明書 - | | All Rights Reserved. Copyright (C) 2005, 2007, Y.Suzuki | +----------------------------------------------------------------------------+ ------------------------------------------------------------------------------ 本書で使用する各種権利表示 ------------------------------------------------------------------------------ - Microsoftは,米国Microsoft Corporationの米国およびその他の国における 登録商標または商標です。 - MS-DOSは,米国Microsoft Corporationの米国およびその他の国における登録商標 または商標です。 - Windowsは,米国Microsoft Corporationの米国およびその他の国における 登録商標または商標です。 - Windows NTは,米国Microsoft Corporationの米国およびその他の国における 登録商標または商標です。 - Windows Serverは,米国Microsoft Corporationの米国およびその他の国における 登録商標または商標です。 ※ (R)および(TM)の記述は省略します。 ------------------------------------------------------------------------------ 目次 ------------------------------------------------------------------------------ 1.はじめに 2.使用許諾 3.Simple HTTP Server とは 4.動作環境 5.インストール方法 6.起動方法 7.動作設定 8.CGIプログラムの仕様 9.修正内容 10.Credit ****************************************************************************** 1.はじめに ****************************************************************************** Simple HTTP Serverをダウンロードいただき,ありがとうございます。 本書には本プログラムの使用方法およびその他重要な事柄を記載します。 本プログラムを使用していただく前にご一読ください。 なお,本書記述内容は予告無く変更される可能性があります。 予めご了承ください。 ****************************************************************************** 2.使用許諾 ****************************************************************************** - 雑誌公開を許可します。 本プログラムを雑誌公開して頂ける雑誌社様は,事前または事後に 著作者にご連絡ください。 - 2次的著作物の公開は認めません。 本プログラムを逆アセンブルなどの方法で改造したものの利用は, 個人の範囲に留めてください。 - 無許可の再配布は認めません。 再配布とは,本プログラムを著作者以外の者がWWWページなどで ダウンロード可能な状態にしておく事を指します。 ただし,以下のケースについては除外します。 -> 雑誌公開の場合(ただし,事前または事後の連絡が必要) -> 著作者(Y.Suzuki)の了承の元での公開 - 本プログラムを用いた運用に関する制限事項はありません。 商用・私用は不問です。 (バグフィックスには極力協力しますが,正式なサポートではない点を ご注意ください。) - 本プログラムを別のプログラムに組み込む場合,以下の条件を満たす必要が あります。 -> 著作者(Y.Suzuki)の了承. (公開する場合は公開前の事前了承が必要) -> 組み込み製品への本ドキュメントの同梱. (htserver.txtにリネーム可) ※ 組み込み製品の種類が商用製品(シェアウェアを含む)である場合でも 著作者(Y.Suzuki)への課金(ロイヤリティの支払い等)は不要です。 ただし,著作者への製品の改善要望やバグフィックス等の正式なサポートが 一切受けられない点を踏まえた上で,製品への組み込みをご検討ください。 万が一サポートを必要とされる場合は, 組み込み製品を公開される前にその旨をご相談ください。 ****************************************************************************** 3.Simple HTTP Server とは ****************************************************************************** 主に小規模(個人)でHTTPサーバを運用するユーザをターゲットとして製作された, 極めてシンプルなHTTPサーバプログラムです。 HTTP/1.0(RFC1945)の主要な機能に対応しています。 HTTP/1.0(RFC1945)との(重要な)機能差異については本書に記述しています。 ****************************************************************************** 4.動作環境 ****************************************************************************** 以下のプラットフォームで動作確認をしています。 - Windows 2000 Professional + SP4 以下のプラットフォームでも概ね動作可能です。 - Windows NT 4.0 + SP6 - Windows XP - Windows Server 2003 (x86) 以下のプラットフォームでは正常な動作はできません。 - Windows 3.1 およびそれ以前の Windows - Windows 95 - Windows 98 - Windows Me (備考1) Windows XP + SP2以降, Windows Server 2003 + SP1 および, Windows Server 2003 x64 Edition などで動作させる場合, Windows Firewallの設定を行わなければリモートホストからアクセス 動作できません。 (備考2) Windows Server 2003 x64 および Itanium2(IPF)アーキテクチャでも概ね動作可能 ですが,WOW64上での動作となるのでパフォーマンスは期待できません。 また,CGIを用いる場合,WOW64上で動作するプログラムに限定する必要があるかも しれません。(x64およびIPF機を実際に所有していないので未確認です) ****************************************************************************** 5.インストール方法 ****************************************************************************** インストール作業は不要です。 動作に必要なファイルは以下の通りです。 - htserver.exe : プログラム本体(バイナリ) - htserver.conf : 動作設定ファイル(テキスト) ****************************************************************************** 6.起動方法 ****************************************************************************** htserver.exeをMS-DOSプロンプトで実行すれば,サーバ機能が開始されます。 World Wide Webでサイトを公開される場合は,ルータを適切に設定していただく 必要があります。(各自で所有されているルータのマニュアルをご確認ください) デフォルトのバインド先はホスト名(hostnameコマンドの結果)の80(HTTP)ポート です。 ****************************************************************************** 7.動作設定 ****************************************************************************** htserver.exeと同じディレクトリにあるhtserver.confに, Simple HTTP Serverの動作設定を記述します。 本章では,htserver.confに設定する各項目について説明します。 ◆ www-route Simple HTTP Serverがクライアントに公開するディレクトリのルートパスを 指定します。 絶対パスまたは相対パスで記述できます。 相対パスで記述した場合,htserver.exeの実行元ディレクトリを 基準とします。 ◆ default-html クライアントからリクエストされたURIにファイル名が含まれなかった時の デフォルトとなるファイル名を指定します。 ◆ content-type ファイルの拡張子に対応するコンテンツの種別を指定します。 Simple HTTP Serverでは,ファイルの拡張子を用いてコンテンツの選別を 選別します。 このパラメタは以下のフォーマットで記述してください。 +------------------------------------------------+ | content-type = ファイル拡張子 : コンテンツ種別 | +------------------------------------------------+ ファイル拡張子にアスタリスク(*)を定義した場合,無条件にそこに定義された コンテンツ種別が採用されます。 このパラメタは複数定義することができます。 (なお,先頭に定義したものの優先度が最も高くなります。 拡張子にアスタリスクを指定している場合も同じ優先度で採用される点を 注意する必要があります。) ◆ cgi-type ファイルの拡張子に対応するCGIプログラム実行エンジン(Perlなど)と, CGIプログラム実行エンジンに引き渡すコマンドライン引数を定義します。 このパラメタは以下のフォーマットで記述してください。 +------------------------------------------------------------------+ | cgi-type = ファイル拡張子 | CGIプログラム実行エンジン(※) | 引数 | +------------------------------------------------------------------+ ※ CGIプログラム実行エンジンのトークンには,環境変数を使用する事が できます。 環境変数は,環境変数名を % で括って指定してください。 このパラメタは複数定義することができます。 なお,先頭に定義したものの優先度が最も高くなります。 ◆ cgi-exe-timeout CGIの実行タイムアウト時間を指定します。 CGIの実行タイムアウト時間以内に終了しないCGIプロセスの実行を強制的に 打ち切ります。 CGIプロセスが子プロセスや孫プロセスを生成する場合,それらも含めた プロセス(=CGIのプロセスツリー)全てが打ち切られます。 ◆ cgi-io-timeout CGIの入出力タイムアウト時間を指定します。 CGIの入出力タイムアウト時間以内にCGIプロセスが応答(標準出力)を行わない場合 CGIプロセスの実行を強制的に打ち切ります。 CGIプロセスが子プロセスや孫プロセスを生成する場合,それらも含めた プロセス(=CGIのプロセスツリー)全てが打ち切られます。 ◆ support-method サポートするHTTPリクエストのメソッドを指定します。 このパラメタは複数定義することができます。 ブラウザからサポートされていないメソッドのHTTPリクエストが送信された場合, 501エラー(未実装)を返します。 [ 指定可能なメソッド ] (1) GET ....................... RFC1945(HTTP/1.0) の Section 8.1 を参照 [概要] クライアントから要求されたURIのファイルを送信します。 このメソッドはHTTPサーバの最も基本となる動作です。 (2) HEAD ...................... RFC1945(HTTP/1.0) の Section 8.2 を参照 [概要] クライアントにヘッダ情報のみ送信します。 これはHTTPサーバに必ず実装されている機能ですが,運用上不要な場合は 外しても差し支えありません。 (3) POST ...................... RFC1945(HTTP/1.0) の Section 8.3 を参照 [概要] 基本的にはGETメソッドと同じ振る舞いをしますが, CGI実行時にCGIプログラムにクライアントのヘッダ情報を標準入力する点が 異なります。 CGIプログラムの仕様については「CGIプログラムの仕様」をご確認ください。 ◆ log-level Simple HTTP Serverは動作状況を逐次標準出力に出力します。 log-levelパラメタにはどの程度詳しく動作状況を報告して欲しいのかを 設定します。 0 : (System Error以外)何も出力しません。 1 : エラー情報を出力します。 2 : 警告情報を出力します。 3 : 一般情報を出力します。 4 : デバッグ情報を出力します。 5 : トレース情報を出力します。 ※ 例えば3を設定している場合,3以下の項目は全て出力されます。 ◆ dump-log (Version 1.01以降) Simple HTTP Serverが入出力したデータのダンプ情報を出力するかを指定します。 on : ダンプログを出力します。 on以外 : ダンプログを出力しません。 ◆ time-flag Simple HTTP Serverが報告する動作状況に時刻を付与するかを指定します。 on : 時刻を付与します。 on以外 : 時刻を付与しません。 ◆ access-log2 (Version 1.03以降) クライアントからのアクセス情報を標準エラー出力にも出力するかを指定します。 on : クライアントからのアクセス情報を標準エラー出力に出力します。 on以外 : クライアントからのアクセス情報を標準エラー出力に出力しません。 <クライアントからのアクセス情報の凡例> YY/MM/DD hh:mm:ss XXXXXXXX [I] Connected from ?.?.?.? (ID=XXXX) ◆ HTTP-version Simple HTTP Serverが応答可能なプロトコルバージョンを定義します。 このパラメタに指定可能な値は以下の通りです。 0.9 : HTTP/0.9プロトコルで応答します。(※指定時の動作は未確認です) 1.0 : HTTP/1.0プロトコルで応答します。 ◆ loop-cycle-sec Simple HTTP Serverのメインループサイクル(秒単位)を指定します。 このパラメタはコネクション数が限界(max-connect)に達した時の 待ち時間としても利用されます。 ◆ loop-cycle-usec Simple HTTP Serverのメインループサイクル(μ秒単位)を指定します。 このパラメタはコネクション数が限界(max-connect)に達した時の 待ち時間としても利用されます。 ◆ max-connect Simple HTTP Serverが同時に受け入れ可能なコネクション数を指定します。 動作マシンがMPU機であったりハイパフォーマンスであれば, より大きな値を設定すれば,クライアントからのアクセスパフォーマンスが 向上します。 逆に動作マシンの性能に見合わない値を設定すると,適切なパフォーマンスが 提供できません。 ◆ session-timeout 接続元クライアントからの要求を待つ最大時間を秒単位で指定します。 この時間以内にクライアントからの要求が来なかった場合, クライアントとの接続を強制的に切断します。 ◆ bind-host Simple HTTP Serverがバインドするホスト名を指定します。 この項目にアスタリスク(*)を設定すると,hostnameコマンドで得られるホスト名 と同じホスト名にバインドします。 ◆ bind-port Simple HTTP Serverがバインドするポート名を指定します。 (通常,http以外を使用することはありません) ◆ socket-protocol このパラメタは変更しないでください。 ◆ socket-backlog Simple HTTP Serverのサーバソケットバックログを指定します。 カーネルの種類により設定可能な限界値が異なります。 (このパラメタはシステムコールlistenに引き渡される値になります) ◆ buffer-size クライアントへの送信データを格納するバッファサイズを指定します。 大きな値を性能すればI/O回数を減らす事ができるのでパフォーマンスが 向上しますが,その分大量のヒープ領域を消費します。 ◆ retry-seconds Simple HTTP Serverのメインループ中で不測のエラーが発生した時の リトライを行う秒数をミリ秒単位で指定します。 ◆ socket-domain Simple HTTP Serverのサーバソケットで使用するドメイン種別を指定します。 IPv4のサーバを使用している場合はAF_INETを指定してください。 IPv6のサーバを使用している場合はAF_INET6を指定してください。 ◆ socket-type このパラメタは変更しないでください。 ****************************************************************************** 8.CGIプログラムの仕様 ****************************************************************************** ------------------------------------------------------------------------------ 8.1 使用可能な処理系(プログラム言語) 以下の機能を持つ処理系をCGIとして使用可能です。 (1) 環境変数の取得 ..... GETデータの取得や標準入力長の取得に必要. (2) 標準入力の入力 ..... POSTデータの取得に必要. (3) 標準出力への出力 ... 応答インタフェースとして必須. ※ C, C++, Java, Perlなど,ほとんどの処理系には上記機能は備わっているので, CGIとして使用できます。 「cgi-type」パラメータを適宜追加・修正して設定してください。 デフォルトで提供している定義ファイルでは,Windowsのネイティブコンソール プログラムをCGIとして実行できるように定義しています。 ------------------------------------------------------------------------------ 8.2 アプリケーション プログラム インタフェース CGIプログラムとS/HTTP Serverとのインタフェースとしては以下の種類があります。 (1) 環境変数 (サーバからのデータ入力) (2) 標準入力 (サーバからのデータ入力) (3) 標準出力 (サーバへのデータ出力) 8.2.1 環境変数 S/HTTPからCGIプログラムへ以下の環境変数が渡されます。 a) QUERY_STRING この環境変数はGETメソッドから実行されるCGIプログラムで使用されます。 入力される値はブラウザのアドレスバーの'?'以降の文字列です。 b) CONTENT_LENGTH この環境変数はPOSTメソッドから実行されるCGIプログラムで使用されます。 入力される値はブラウザから入力されたヘッダ部分の領域長です。 8.2.2 標準入力 標準入力はPOSTメソッドから実行されるCGIプログラムで使用されます。 入力される値はブラウザから入力されたヘッダ部分の文字列(CRLF区切り)です。 8.2.3 標準出力 標準出力はGET, POSTメソッドから実行されるCGIプログラムで共通のインタフェース です。 CGIプログラムが標準出力した文字列がクライアントのブラウザ上に渡されます。 一部の HTTP Serverプログラムでは,「Content-type」のヘッダを出力するものが ありますが,S/HTTP Serverの場合,「Content-type」には「text/html」が自動的に 設定されます。(これをカスタマイズする事はできません) ------------------------------------------------------------------------------ 8.3 タイムアウト時の振る舞いに関して S/HTTP Serverから実行されるCGIプログラムは, 「cgi-io-timeout」または「cgi-exe-timeout」に設定された時間内に 応答(標準出力)を返さなければ,S/HTTP ServerがCGIプログラムの実行を強制的に 打ち切ります。 しかし,CGIプログラムの実行が強制的に打ち切られた場合でも, クライアント(ブラウザ)には「OK 200」プロトコルを返します。 (これはS/HTTP ServerがCGIプログラムのデータを読み込んだ都度, ブラウザにデータを送信している為です。) 強制的に打ち切られ事がブラウザに分かるようにする為に, 「SERVER ERROR: CGI TIMEOUT.」メッセージをブラウザに送信します。 ****************************************************************************** 9.修正内容 ****************************************************************************** ◆ 修正IDについて 修正IDは修正毎に採番されるユニークな識別子です。 ◆ 修正種別について 修正種別はどのような修正が行われたのかを示します。 修正種別には以下の種類があります。 (b) 不良修正 ..... プログラムの不良を修正したことを示します。 (c) 仕様変更 ..... 旧バージョンから仕様が変更されたことを示します。 (e) エンハンス ... 機能が追加されたことを示します。 ============================================================================== ◆ Version 1.04 → Version 1.05 の修正内容 ------------------------------------------------------------------------------ [ 修正ID ] HT0105B01 [修正種別] 不良修正 [修正内容] htserver.exeをサービスプログラムなどから起動した状態でログオフすると, htserver.exeが停止する問題を修正しました。 ------------------------------------------------------------------------------ ============================================================================== ◆ Version 1.03 → Version 1.04 の修正内容 ------------------------------------------------------------------------------ [ 修正ID ] HT0104B01 [修正種別] 不良修正 [修正内容] クライアントからの接続数が定義ファイルのmax-connectに定義した値に達すると htserver.exeのCPU使用率が100%になる問題を修正しました。 ------------------------------------------------------------------------------ ============================================================================== ◆ Version 1.02 → Version 1.03 の修正内容 ------------------------------------------------------------------------------ [ 修正ID ] HT0103E01 [修正種別] エンハンス [修正内容] クライアントからのアクセス情報を標準エラー出力にも出力するオプション 「access-log2」を追加しました。 「access-log2」を「on」にした場合,クライアントからのアクセス情報を 標準エラー出力にも出力します。(従来通り標準出力にも出力されます) <クライアントからのアクセス情報> YY/MM/DD hh:mm:ss XXXXXXXX [I] Connected from ?.?.?.? (ID=XXXX) ------------------------------------------------------------------------------ ============================================================================== ◆ Version 1.01 → Version 1.02 の修正内容 ------------------------------------------------------------------------------ [ 修正ID ] HT0102C01 [修正種別] 仕様変更 [修正内容] htserver.exeコマンド実行時にタイトル情報を出力するようにしました。 タイトル情報とは以下を含みます。 (1) 開始メッセージ (2) 実行環境のOSバージョン情報 ------------------------------------------------------------------------------ ============================================================================== ◆ Version 1.00 → Version 1.01 の修正内容 ------------------------------------------------------------------------------ [ 修正ID ] HT0101E01 [修正種別] エンハンス [修正内容] S/HTTP Server - Enterprise Editionに対応しました。 ------------------------------------------------------------------------------ [ 修正ID ] HT0101C01 [修正種別] 仕様変更 [修正内容] ログ情報の「Client version: HTTP/?.?」のログレベルを変更しました。 旧ログレベル: 3(一般情報) 新ログレベル: 4(デバッグ情報) ------------------------------------------------------------------------------ [ 修正ID ] HT0101C02 [修正種別] 仕様変更 [修正内容] 従来,ログレベルに4(デバッグ情報)以上を設定していた場合に, 送受信データや入出力データのダンプ情報を出力していましたが, これらのログ(ダンプログ)の出力専用オプション「dump-log」を設けました。 このオプションに「on」を指定した場合,ログレベルに関係なく,ダンプログを 出力します。 このオプションに「off」を指定した場合,ログレベルに関係なく,ダンプログを 出力しません。 ------------------------------------------------------------------------------ [ 修正ID ] HT0101C03 [修正種別] 仕様変更 [修正内容] 標準出力へのログ出力後に標準出力ハンドルをフラッシュするようにしました。 ------------------------------------------------------------------------------ [ 修正ID ] HT0101C04 [修正種別] 仕様変更 [修正内容] 「cgi-type」の区切り文字をコロン(:)から縦棒(|)に変更しました。 ------------------------------------------------------------------------------ ****************************************************************************** 10.Credit ****************************************************************************** 製作・著作 : Yoji Suzuki ホームページ : http://hp.vector.co.jp/authors/VA040196/index.htm サポート連絡先: http://www.k2.dion.ne.jp/~ysuzuki/index.htm メール : ysuzuki@r8.dion.ne.jp ============================================================================== - 以 上 -