Внутренняя ошибка сервера 500 генерируется из сценария perl, но сценарий работает нормально - PullRequest
2 голосов
/ 25 февраля 2011

У меня есть Perl-скрипт, который вызывается через Ajax.Он просто записывает 3 значения в базу данных.Код работает нормально (значения записываются успешно), но я получаю «Внутренняя ошибка сервера».Журнал ошибок сообщает «преждевременный конец заголовков скриптов».

С приложением проблем не было - оно работает как требуется и работает в течение нескольких месяцев - но я заметил ошибку через Firebug при тестировании чего-то другого.

Так что я начал убирать Perl из скрипта, пытаясь найти проблему ... и продолжал, пока у меня осталось только две строки ... shebang и exit ... Я все еще получаю ошибку 500.Запуск скрипта прямо из браузера выдает ошибку 500 в окне браузера ... из командной строки все нормально - т.е.ничего в журнале ошибок apache.

В настройке сервера нет ничего плохого - он имеет сотни сценариев perl и работает годами.

Ответы [ 2 ]

8 голосов
/ 25 февраля 2011

Сначала вы должны вывести действительный заголовок CGI.

Сервер ожидает, что первый вывод из сценария CGI будет заголовком CGI.Обычно это может быть просто print "Content-type: text/plain\n\n"; или с CGI.pm и его производными, print header().

3 голосов
/ 25 февраля 2011

Если вы пишете в базу данных и вам не нужно ничего отправлять обратно клиенту, правильный ответ - это статус 204:

print "Status: 204 No Response\n\n";

Это делает сервер счастливым, поскольку он отправляет полный заголовокустановить и сообщить клиентской стороне, что запрос был успешным и что нет тела ответа для обработки.

...