首页 > 解决方案 > apache 似乎忽略了 CGI 脚本返回的“内部服务器错误”

问题描述

我正在编写 Python CGI 脚本并尝试在需要返回 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 在任何其他方面都可以在此服务器上正常工作。

有什么想法吗?我错过了什么吗?

谢谢,

阿米特

标签: apachecgi

解决方案


对自己的回答:看来我是在找错树了。根据一些线索和更多的经验结果,似乎当将请求传递给外部脚本(例如 cgi 脚本、php 等)时,apache 服务器希望外部脚本来处理任何错误,外部脚本的责任是返回包含错误代码和错误消息的文档。外部脚本还负责记录错误(通常将其打印到标准错误就足够了,它会被 apache 挑选并写入其错误日志)。

因此,例如,如果我的 cgi 脚本需要报告“内部服务器错误”,仅返回标头是不够的(请参阅我的问题),但它应该以 HTML 格式创建并返回整个错误消息。此外,它应该向标准错误打印一条错误消息。

我还没有找到官方消息来源,但也许我以某种方式忽略了它。


推荐阅读