Программа C для CGI выдает ошибку неполных заголовков HTTP

Мой код программы C:

#include <stdio.h>
int main(void) {
  printf("Content-Type: text/plain;charset=us-ascii\n\n");
  printf("Hello world\n\n");
  return 0;
}

Я компилировал его несколько раз, используя команды:

gcc -o first.cgi first.c
gcc first.c -o first.cgi
g++ first.c -o first.cgi

Когда я использую first.cgi в своей сети, выдает ошибку:

  • CGI-ошибка

    Указанное приложение CGI повело себя неправильно, не вернув полный набор заголовков HTTP. Заголовки, которые он вернул, следующие:
    Нераспознанный символ \x90 в J:\KKS_Sawdagger\cgi-bin\first.cgi, строка 1.

Может ли кто-нибудь указать мне причину, пожалуйста?


person muhammadanish    schedule 31.12.2011    source источник


Ответы (1)


Одна из возможностей состоит в том, что HTTP требует строк, оканчивающихся на CRLF ("\r\n"); так же, как и большинство интернет-протоколов, использующих линии.

Теперь есть несколько смягчающих замечаний, которые могут относиться к вашему коду. Стандарт C говорит, что текстовые потоки должны преобразовываться из локальных окончаний собственных строк в \n на входе и из \n в локальные собственные окончания строк на выходе. Вопрос будет звучать так: «Является ли stdout текстовым потоком или двоичным потоком в Windows?», и это вопрос, на который я не знаю ответа (но «текст» является правдоподобным предположением, и в этом случае код должен работать). в винде нормально).

Поскольку сообщение об ошибке идентифицирует проблему как байт 0x90, который не показан в коде, вероятно, здесь есть что-то еще. Вы сами запускали программу?

Разве расширение для исполняемого файла не должно быть .exe в Windows? Возможно, cmd.exe или какой-либо другой интерпретатор команд дает вашей программе интерпретировать ее как какой-то сценарий, и ему это не очень нравится. (Тем не менее, ISTR указывает на то, что GCC в Windows добавляет суффикс .exe, поэтому фактические результаты ваших компиляций будут first.cgi.exe.)

person Jonathan Leffler    schedule 31.12.2011