### AN HTTP Server の ISAPI 対応状況

Version 0.9 beta 5c
1997年12月06日
中田 昭雄
nakata@st.rim.or.jp

ISAPI 特に PerlIS を使うことにより、CGI/SSIの動作が速くなります。 そのため（だけ）に組み込んでみました。
PWSのない Windows95 で、PerlISをインストールすると IIS がない、といってインストールが中止されますが、 それはそれで大丈夫です。

1. An HTTP Server の ISAPI 対応
   - GetServerVariable(), WriteClient(), ReadClient() に対応。
   - ServerSupportFunction() は以下のリクエストに対応。
     - HSE_REQ_SEND_RESPONSE_HEADER
     - HSE_REQ_SEND_URL_REDIRECT_RESP

2. 現在使えるDLL
   1. サーバーサイドクリッカブルマップ(imagemap.dll, htimage.dll)
      - dll は、cgi-bin ディレクトリにあります。
      - Options/General で Use ISAPI をチェックすれば exe の代わりに dll を使います。
   2. Perlスクリプト(PerlIS.dll)
      - PerlIS.dll は別途入手し、perl.exe と同じディレクトリにインストールしてください。
      - perl.exe の代わりに PerlIS.dll を使用するには、Options/General で Use perlIS をチェックしてください。
      - Perlスクリプトにいくつかの制限があります。詳細は下記を参照してください。
   3. テスト版バッチファイル用DLL(cmdIS.dll)
      - cmdIS.dll は、scripts ディレクトリにあります。
      - echo, echob, set, type にのみ対応。echob は、改行のみを出力します。 他のコマンド、パイプ、リダイレクト、外部コマンドは使えません。 いずれ、外部コマンド以外には対応する予定。
      - cmdIS.dll は SSIでは使えません。
   4. PWSに付属の counter.dll も動きます。
      - PWSに付属の counter.dll は、C:\Webshare\Scripts にあります。

3. Perlスクリプト使用上の注意
   - 拡張子は .pl と .cgi です。
   - SSI, CGI で使用できます。
   - #exec cgi= では、print "Content-type: text/html\n\n" を忘れないようにしてください。
   - #exec cmd= で引数をつけると、引数は QUERY_STRING に入ります。$ARGV[0] などの引数としては受け付けません。

4. PerlIS の制限
   - パイプ入出力は使えません。 標準入力からの読み込みはできるだけ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) を使う方がよいようです。
   - カレントディレクトリを変える操作はできるようですが、避けた方がよいようです。（httpd が動くディレクトリが変更されます。）
   - バッククオート, system( ), exec( ) などによる外部プログラムの実行はできません。無視されるようです。
   - Location: を含むヘッダを返すときは、 初めに "HTTP/1.0 302 Found\n" を出力（print）してください。 そうしないと、"HTTP/1.0 200 OK\n" になってしまいます。

実例

- SSIの例 (perlIS.dll)
- CGIの例 (cmdIS.dll)
- クリッカブルイメージマップ (htimage.dll, imagemap.dll)

ISAPI、PerlIS 関連リンク

- 新 Perl for Win32 FAQ 和訳 の特に PerlIS
- MS IIS(Internet Information Server)でのCGI