Python CGI Ajax 调用导致内部服务器错误

1 投票
3 回答
1259 浏览
提问于 2025-04-17 19:15

我正在尝试进入网页开发的世界,但我遇到了一些麻烦,搞不懂为什么我的基本“你好,世界”脚本会失败。我有一个简单的AJAX调用,去请求一个返回少量HTML的Python CGI脚本,但结果调用失败,显示“内部服务器错误”的信息。以下是我的代码:

Python脚本:

#!/usr/local/bin/python

print "Content-Type: text/html\n"
print """\
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
"""

AJAX调用:

$(function(){
            $('#clickme').click(function(){
                $.ajax({
                    url: "cgi-bin/ajaxpost.cgi",
                    dataType: "html",
                    type: "POST",
                    success: function(response){
                        alert(response);
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        alert(errorThrown);
                    }
                });
            });
        });

这是我的服务器错误日志的内容:

CGI ERROR: A system problem prevented your request from being completed., referer: [my test page]
Premature end of script headers: ajaxpost.cgi, referer: [my test page]

我仔细检查过我的服务器,发现“#!/usr/local/bin/python”是正确的Python路径。此外,他们说没有专门的cgi-bin文件夹,任何CGI脚本只要有.cgi扩展名就可以在任何文件夹中运行。编辑:我也已经允许在服务器上执行.cgi文件。

我承认我可能需要一个“像我五岁一样解释”的答案。谢谢!

3 个回答

1

print "Content-Type: text/html\n"

的结尾,你需要加两个\n,而不是一个。

试试这样写:print "Content-Type: text/html\n\n"

可以查看这个链接了解更多信息:https://httpd.apache.org/docs/2.2/howto/cgi.html#writing

1

你在第一行的末尾有一个斜杠字符。在三重引号里面,这个斜杠是字面意思的。把它去掉。

1

我刚刚通过在WinSCP上删除我的.cgi文件,然后重新上传一个新的文件来解决了这个问题,而不是在更新时直接覆盖它。此外,我还确保上传的是文本格式,而不是二进制格式。我怀疑这可能是问题所在,因为可能是保留了Windows文本文件的格式。这真是个新手错误,感谢大家的帮助。

撰写回答