IIS 7.0 サーバーで実行する CGI アプリケーションのプロトタイプを作成しています。最終的に、そのアプリケーションは、実際のデータを生成するのに時間がかかる可能性のあるクエリに応答して生成された多数の HTTP チャンク応答を送信します。
その側面 (つまり、実際のデータの生成) を掘り下げる前に、cgi アプリが実際に非解析ヘッダー モードで実行されているかどうかをテストしたいと思いました (つまり、cgi アプリ自体がすべてのヘッダーを生成し、IIS はすべての出力をヘッダーに返すだけです)。 http ブラウザー/エージェントを要求しています。
だから私は次を返す簡単なアプリを書きました(タイムスタンプに注意してください-タイムスタンプ付きの各行の間に1秒の一時停止があり、テキストが示すように、これは実行に10秒強かかります-実際にcgiアプリを実行できますコマンド ラインを実行し、このタイミングを観察します。
HTTP/1.1 200 OK
Date: Sun, 17 Jul 2011 09:07:47 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
17;
NPH CGI Chunked Example
4D;
the fat cat sat on the mat, perplexed at the antics of the quick brown fox.
2D;
counting ... 1... the time is now 09:07:48
2D;
counting ... 2... the time is now 09:07:49
2D;
counting ... 3... the time is now 09:07:50
2D;
counting ... 4... the time is now 09:07:50
2D;
counting ... 5... the time is now 09:07:51
2D;
counting ... 6... the time is now 09:07:52
2D;
counting ... 7... the time is now 09:07:53
2D;
counting ... 8... the time is now 09:07:54
2D;
counting ... 9... the time is now 09:07:55
2E;
counting ... 10... the time is now 09:07:56
18;
NPH Chunked Example Ends
0
サーバーにexeをインストールしてInternet Explorerで開くと、予想されるテキストが表示されます(別の時間帯と別のタイムゾーンで実行したため、時間が異なります):
NPH CGI Chunked Example
the fat cat sat on the mat, perplexed at the antics of the quick brown fox.
counting ... 1... the time is now 16:14:58
counting ... 2... the time is now 16:14:59
counting ... 3... the time is now 16:15:00
counting ... 4... the time is now 16:15:01
counting ... 5... the time is now 16:15:02
counting ... 6... the time is now 16:15:03
counting ... 7... the time is now 16:15:04
counting ... 8... the time is now 16:15:05
counting ... 9... the time is now 16:15:06
counting ... 10... the time is now 16:15:07
NPH Chunked Example Ends
ただし、10 秒が経過するまで何も表示されません。(注 - クロムでも同じ結果)
確認するために、テキスト エディターで http 要求を作成し、サーバーへのポート 80 の telnet に貼り付けました。上記のように、応答全体の前に 10 秒のギャップを観察しました。
exeにプレフィックス「nph-」が付いているかどうかに関係なく、同じ結果が得られます-「nph-hello.exe」、「nphhello.exe」、および「hello.exe」を使用して、telnetで同じテストを実行しました。以下を使用します。
(注:識別アドレスは、この投稿用に調整されています)
GET /cgi-bin/nph-hello.exe HTTP/1.0
Host: www.myserver.com:80
From: someone@gmail.com
User-Agent: telnet/1.0
(exe 命名プレフィックスの関連性については、http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176113 の「回避策として...」で始まる「解決策」の下のメモをお読みください)
私は、この情報が古くなっているか、この機能を有効にするために他の何かを有効にする必要があると思わせる、exe 名の接頭辞に関連する telnet の識別可能な出力の違いを観察していないようです。 cgi アプリが開始される前 - これは、アプリ自体が行うことではなく、プレフィックスが使用される理由を説明しています - つまり、IIS は応答を待つかどうかを知る必要があります)
表面的には、目的の結果を達成しています-データは要求元のhttpエージェントへの道を見つけます-リアルタイムで発生することを望んでいるので、リクエストが行われると進行状況の更新が表示されます.
だから私の質問:
1) NPH をオンにするために必要な設定はありますか (またはプレフィックスは正しいですか?)
2) CGI アプリが本当に NPH モードであるかどうかを確認するために行うことができるテストはありますか?
3) stddout (つまり、応答データ) をリクエスト側のエージェントにリアルタイムでパイプすることを意図していますか?それとも、IIS は最初になんらかの方法でバッファリングして解析する必要がありますか?