Использование режима NPH в исполняемом CGI-файле EXE на IIS 7.0 - это может быть "в реальном времени"?
Я пишу прототип CGI-приложения для запуска на сервере IIS 7.0, что в конечном итоге приведет к тому, что приложение отправит несколько фрагментированных 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
Когда я устанавливаю исполняемый файл на сервер и открываю его в 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 секунд. (примечание - тот же результат в Chrome)
чтобы убедиться, что я создал запрос http в текстовом редакторе и вставил его в telnet на 80-м порту сервера, он наблюдал 10-секундный разрыв перед полным ответом, как показано выше.
Я получаю тот же результат, независимо от того, имеет ли исполняемый файл префикс "nph-" или нет - я выполнил тот же тест в telnet, с "nph-hello.exe", "nphhello.exe" и "hello.exe", используя следующее:
(примечание: идентифицирующие адреса корректируются для этого поста)
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 разделе "Разрешение" начало "в качестве обходного пути...")
Похоже, я не наблюдаю какой-либо заметной разницы в выходных данных в telnet, связанной с префиксом имени exe, что приводит меня к убеждению, что эта информация либо устарела, либо что необходимо включить что-то еще, чтобы включить эту функцию, что явно должно произойти до запуска приложения cgi - что объясняет, почему префикс используется, а не то, что делает само приложение - т.е. IIS должен знать, дождаться ли ответа)
хотя на поверхности он достигает желаемого результата - данные находят путь к запрашивающему http-агенту - я бы предпочел, чтобы это происходило в режиме реального времени, поэтому при выполнении запроса могут отображаться обновления прогресса.
Итак, мои вопросы:
1) есть ли какие-то настройки, которые нужно сделать, чтобы включить NPH (или префикс правильный?)
2) Есть ли какой-нибудь тест, который приложение cgi может выполнить, чтобы определить, действительно ли оно находится в режиме NPH?
3) предполагается ли, что stddout (то есть данные ответа) будет передан запрашивающему агенту в реальном времени, или IIS обязательно должен сначала буферизовать и проанализировать его каким-либо образом?