Приветствую.
Написал маленький 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" в своих ответах. Почему это проявляется?
Спасибо!
>fprintf(stdout, "some string");
>fprintf(stdout, "some string2");
>'tcpdump-ом' заметил что web-сервер(thttpd/2.25b) шлет строки "some string" и "some string2" в
>своих ответах. Почему это проявляется?
а не должен разве? насколько я помню весь stdout скрипта отдается клиенту.
>>fprintf(stdout, "some string");
>>fprintf(stdout, "some string2");
>>'tcpdump-ом' заметил что web-сервер(thttpd/2.25b) шлет строки "some string" и "some string2" в
>>своих ответах. Почему это проявляется?
>а не должен разве? насколько я помню весь stdout скрипта отдается клиенту.
>
Я так и догадывался, но тогда почему не отдаются остальные строки, выводимые fprintf'ом ?
И второе - это никак не отражается на содержимом html страницы, видимо потому что content-type появляется позже...
>Я так и догадывался, но тогда почему не отдаются остальные строки, выводимые
>fprintf'ом ?
в смысле какие остальные? я вижу 3 принтф-а. 1 и вторая выводят строки, вы сами сказали. какие остальные? третья?>И второе - это никак не отражается на содержимом html страницы, видимо
>потому что content-type появляется позже...
это да.
>>Я так и догадывался, но тогда почему не отдаются остальные строки, выводимые
>>fprintf'ом ?
>в смысле какие остальные? я вижу 3 принтф-а. 1 и вторая выводят
>строки, вы сами сказали. какие остальные? третья?
>
да, последний fprintf(), он никак не выводится в поток, почему?
Странный у Вас код. Непонятно, чего делает connect(), и крайне
подозрительно, что Content-type:... выводится ближе к финалу.
>Странный у Вас код. Непонятно, чего делает connect(), и крайне
>подозрительно, что Content-type:... выводится ближе к финалу.
connect() нужен для соединения с демоном, и по результатам общения с демоном вывод в html.А почему Content-type: вызвал подозрение?
>А почему Content-type: вызвал подозрение?Ибо заголовок, а следовательно - должен идти вначале ;-)
>>А почему Content-type: вызвал подозрение?
>
>Ибо заголовок, а следовательно - должен идти вначале ;-)
По логике программы мне не нужно выводить все подряд в html
>>>А почему Content-type: вызвал подозрение?
>>
>>Ибо заголовок, а следовательно - должен идти вначале ;-)
>По логике программы мне не нужно выводить все подряд в htmlВсё, что вы на stdout направляете, Web-сервер отправит клиенту.
Соответственно, ответ должен соответствовать по формату требованиям
протокола HTTP. А там сказано, что сперва идут заголовки в форматеИмя1: Значение1
...
ИмяN: ЗначениеNЗатем идёт пустая строка, после чего следует документ.
Поэтому вывод чего-то ещё *перед* заголовками выглядит
подозрительно, о чём я и написал выше.