【问题标题】:CGI script end of script before headersCGI 脚本在标题之前的脚本结尾
【发布时间】:2017-10-09 10:05:48
【问题描述】:

我有一个带有 Apache 的 VPS 服务器。我想执行简单的 CGI 脚本。我创建了一个 python 脚本,将其保存为 .cgi 文件并将其放置到文件夹 cgi-bin 中,但它只显示错误消息:“在标题之前脚本输出结束”。

但是,当我将此脚本保存为 .py 文件并且没有将其放入 cgi-bin 文件夹时,它可以工作,但是每当出现错误时,它没有显示任何错误消息,只是服务器错误。命令 cgitb.enable() 没有显示任何错误。

我尝试授予文件 755 权限,但这仍然没有解决我的问题。

哪里有问题?

源代码:

#!/usr/local/bin/python3
print("Content-type:text/html")
print("")
print ("<html><head><title>CGI</title></head>")
print ("<body>")
print ("hello cgi")
print ("</body>")
print ("</html>")

感谢您的回答。

【问题讨论】:

    标签: python apache cgi


    【解决方案1】:

    使用sys.stdout.write 并添加\n 可能更有用,这样您就可以确切地知道写入标准输出的内容:

    #!/usr/bin/env python
    
    import sys
    import os
    
    sys.stdout.write('Status: 200 OK\n')
    sys.stdout.write('Content-Type: text/html; charset=utf-8\n\n')
    sys.stdout.write('<html><body>Hello, world!</body></html>\n')
    sys.exit(os.EX_OK)
    

    使用python script.py | cat -e 运行脚本,以便验证行尾。

    确保在开始发送内容后不再发送任何 HTTP 标头。

    【讨论】:

    • 试过了。当我将其保存为 .cgi 时,错误仍然相同。当我将其保存为 .py 并尝试从 Web 访问它时,出现一个错误,显示“无法访问此站点”,描述为“ERR_CONTENT_DECODING_FAILED”,这与我收到的相同消息,当 python 发现一些错误。但是当我在服务器控制台上尝试这些命令时,它工作得很好。
    • 我会仔细检查您的标头,并仔细检查您的 Apache 配置文件。也许从 Apache 配置中的最低配置开始,这样您就知道您的 Web 服务器在发送内容后不会添加额外的标头。以下 SO 帖子可能有用:stackoverflow.com/questions/14039804/…
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2014-05-03
    • 2019-04-23
    • 2017-04-24
    • 2015-04-04
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多