apache - 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 在任何其他方面都可以在此服务器上正常工作。
有什么想法吗?我错过了什么吗?
谢谢,
阿米特
解决方案
对自己的回答:看来我是在找错树了。根据一些线索和更多的经验结果,似乎当将请求传递给外部脚本(例如 cgi 脚本、php 等)时,apache 服务器希望外部脚本来处理任何错误,外部脚本的责任是返回包含错误代码和错误消息的文档。外部脚本还负责记录错误(通常将其打印到标准错误就足够了,它会被 apache 挑选并写入其错误日志)。
因此,例如,如果我的 cgi 脚本需要报告“内部服务器错误”,仅返回标头是不够的(请参阅我的问题),但它应该以 HTML 格式创建并返回整个错误消息。此外,它应该向标准错误打印一条错误消息。
我还没有找到官方消息来源,但也许我以某种方式忽略了它。
推荐阅读
- php - 短代码中的 WooCommerce 评论明星
- java - 如何正确迁移到 Realm 中的嵌入式对象?
- python - 如果变量没有,如何将备用值分配给变量
- css - 修改 GTK 按钮样式/CSS 并立即更新/刷新
- jenkins - 如何在詹金斯管道脚本上禁用轻量级结帐?
- winapi - 如何在 Win32 API 中重现资源管理器按钮
- powershell - 递归地将文件从所有子文件夹移动到目录中的一个子文件夹
- python - Django read file from model, [Errno 2] No such file or directory
- keras - 使用 Keras Tuner 进行超参数调优
- node.js - 如何从 MongoDb 获取云 URL 数据