Apache, кажется, игнорирует «Внутреннюю ошибку сервера», возвращенную сценарием CGI - PullRequest
0 голосов
/ 01 июля 2018

Я пишу скрипт CGI на Python и пытаюсь проверить поведение системы, когда мне нужно вернуть Status: 500 Internal Server Error.

Мой скрипт выглядит примерно так:

#!/usr/bin/env python3                                                                    
print("Content-type: text/html")
print("Status: 500 Internal Server Error")
print()

Когда я запускаю этот скрипт, в журнале доступа Apache появляется отчет с кодом 500, но он не отображается в журнале ошибок. Я также не получаю "500 страниц" в браузере.

Если внутренняя ошибка вызвана каким-либо другим способом (например, сценарий, который не является исполняемым или содержит неверный заголовок HTTP), я получаю «нормальное» поведение внутренней ошибки сервера.

Похоже, что apache игнорирует, каким-то образом, статус, возвращаемый (моими) CGI-скриптами. Я искал ответ, но ничего не смог найти.

Просто для ясности, CGI отлично работает на этом сервере в любом другом аспекте.

Есть мысли? Я что-то упустил?

Thansk

Amit

1 Ответ

0 голосов
/ 05 июля 2018

Отвечая самому себе: кажется, что я лаю не на том дереве. Основываясь на некоторых подсказках и более эмпирических результатах, кажется, что при передаче запроса внешнему сценарию (например, сценарию cgi, php и т. Д.) Сервер apache ожидает, что внешний сценарий обработает любую ошибку, и ответственность за выполнение этого сценария лежит на внешнем сценарии. вернуть документ, который содержит код ошибки и сообщение об ошибке. Внешний скрипт также отвечает за регистрацию ошибки (обычно достаточно напечатать ее со стандартной ошибкой, и она будет выбрана apache и записана в журнал ошибок).

Так, например, если мой скрипт cgi должен сообщить о «Внутренней ошибке сервера», недостаточно просто вернуть только заголовок (см. Мой вопрос), но он должен создать и вернуть все сообщение об ошибке в HTML формат. Кроме того, следует напечатать сообщение об ошибке со стандартной ошибкой.

Я не нашел официального источника для этого, но, возможно, я как-то упустил это из виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...