Внутренняя ошибка сервера 500 генерируется из сценария perl, но сценарий работает нормально
У меня есть Perl-скрипт, который вызывается через Ajax. Он просто записывает 3 значения в базу данных. Код работает нормально (значения записываются успешно), но я получаю "Внутренняя ошибка сервера". В Errorlog написано "преждевременный конец заголовков скриптов".
С приложением проблем не было - оно работает как требуется и работает несколько месяцев - но я заметил ошибку через Firebug при тестировании чего-то другого.
Поэтому я начал удалять perl из сценария, пытаясь найти проблему... и продолжал, пока у меня осталось только две строки... shebang и exit ... Я все еще получаю ошибку 500. Запуск скрипта прямо из браузера дает ошибку 500 в окне браузера... из командной строки все нормально - т.е. ничего в журнале ошибок apache.
В настройке сервера нет ничего плохого - он имеет сотни perl-скриптов и работает годами.
2 ответа
Если вы пишете в базу данных и вам не нужно ничего отправлять обратно клиенту, правильный ответ - статус 204:
print "Status: 204 No Response\n\n";
Это делает сервер счастливым, потому что он отправляет полный набор заголовков, и сообщает клиентской стороне, что запрос был успешным и что нет тела ответа для обработки.
Сначала вы должны вывести действительный заголовок CGI.
Сервер ожидает, что первый вывод скрипта CGI будет заголовком CGI. Как правило, это может быть так просто, как print "Content-type: text/plain\n\n";
или с CGI.pm и его производными, print header()
,