URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4548
[ Назад ]

Исходное сообщение
"CGI-скрипт на С"

Отправлено grib , 08-Авг-05 08:10 
Приветствую.

Написал маленький CGI-скрипт на C (мой первый скрипт :)) и натолкнулся на интересную проблему:

~~
sd = socket();
....
fprintf(stdout, "some string");
fprintf(stdout, "some string2");
...
connect();
...
fprintf(stdout, "some string3");
...
printf("Content-Type: text/html\n\n");
...
~~

'tcpdump-ом' заметил что web-сервер(thttpd/2.25b) шлет строки "some string" и "some string2" в своих ответах. Почему это проявляется?

Спасибо!

Содержание

Сообщения в этом обсуждении
"CGI-скрипт на С"
Отправлено Дениска , 08-Авг-05 08:46 
>fprintf(stdout, "some string");
>fprintf(stdout, "some string2");
>'tcpdump-ом' заметил что web-сервер(thttpd/2.25b) шлет строки "some string" и "some string2" в
>своих ответах. Почему это проявляется?
а не должен разве? насколько я помню весь stdout скрипта отдается клиенту.

"CGI-скрипт на С"
Отправлено grib , 08-Авг-05 10:02 
>>fprintf(stdout, "some string");
>>fprintf(stdout, "some string2");
>>'tcpdump-ом' заметил что web-сервер(thttpd/2.25b) шлет строки "some string" и "some string2" в
>>своих ответах. Почему это проявляется?
>а не должен разве? насколько я помню весь stdout скрипта отдается клиенту.
>
Я так и догадывался, но тогда почему не отдаются остальные строки, выводимые fprintf'ом ?
И второе - это никак не отражается на содержимом html страницы, видимо потому что content-type появляется позже...


"CGI-скрипт на С"
Отправлено Дениска , 08-Авг-05 10:12 
>Я так и догадывался, но тогда почему не отдаются остальные строки, выводимые
>fprintf'ом ?
в смысле какие остальные? я вижу 3 принтф-а. 1 и вторая выводят строки, вы сами сказали. какие остальные? третья?

>И второе - это никак не отражается на содержимом html страницы, видимо
>потому что content-type появляется позже...
это да.


"CGI-скрипт на С"
Отправлено grib , 08-Авг-05 10:45 
>>Я так и догадывался, но тогда почему не отдаются остальные строки, выводимые
>>fprintf'ом ?
>в смысле какие остальные? я вижу 3 принтф-а. 1 и вторая выводят
>строки, вы сами сказали. какие остальные? третья?
>
да, последний fprintf(), он никак не выводится в поток, почему?

"CGI-скрипт на С"
Отправлено DeadMustdie , 10-Авг-05 00:11 
Странный у Вас код. Непонятно, чего делает connect(), и крайне
подозрительно, что Content-type:... выводится ближе к финалу.

"CGI-скрипт на С"
Отправлено grib , 10-Авг-05 04:58 
>Странный у Вас код. Непонятно, чего делает connect(), и крайне
>подозрительно, что Content-type:... выводится ближе к финалу.
connect() нужен для соединения с демоном, и по результатам общения с демоном вывод в html.

А почему Content-type: вызвал подозрение?


"CGI-скрипт на С"
Отправлено DeadMustdie , 10-Авг-05 21:16 
>А почему Content-type: вызвал подозрение?

Ибо заголовок, а следовательно - должен идти вначале ;-)


"CGI-скрипт на С"
Отправлено grib , 13-Авг-05 12:10 
>>А почему Content-type: вызвал подозрение?
>
>Ибо заголовок, а следовательно - должен идти вначале ;-)
По логике программы мне не нужно выводить все подряд в html

"CGI-скрипт на С"
Отправлено DeadMustdie , 13-Авг-05 15:23 
>>>А почему Content-type: вызвал подозрение?
>>
>>Ибо заголовок, а следовательно - должен идти вначале ;-)
>По логике программы мне не нужно выводить все подряд в html

Всё, что вы на stdout направляете, Web-сервер отправит клиенту.
Соответственно, ответ должен соответствовать по формату требованиям
протокола HTTP. А там сказано, что сперва идут заголовки в формате

   Имя1: Значение1
   ...
   ИмяN: ЗначениеN

Затем идёт пустая строка, после чего следует документ.
Поэтому вывод чего-то ещё *перед* заголовками выглядит
подозрительно, о чём я и написал выше.