1

Web 開発の世界に足を踏み入れようとしていますが、基本的な Hello World スクリプトが失敗する理由を理解するのに苦労しています。少量の HTML を返す Python cgi スクリプトへの単純な AJAX 呼び出しがありますが、代わりに呼び出しが失敗し、エラー メッセージとして "Internal Server Error" が表示されます。これが私のコードです:

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 を実行できるようにしました。

私は先に進み、おそらく「私が5歳のように説明してください」という答えが必要になることを認めます. ありがとう!

4

3 に答える 3

1

最初の行の終わりにスラッシュ文字があります。三重引用符の内側は、文字通りのスラッシュです。それを除く。

于 2013-03-15T19:48:33.600 に答える
1

サーバー上の .cgi ファイルを WinSCP で削除し、更新の合間に上書きするのではなく、新しく再アップロードすることで、機能するようになりました。これに加えて、バイナリではなくテキストとしてアップロードされていることを確認しました。おそらくWindowsのテキストファイル形式を保持していたので、これが問題だったのではないかと思います。初歩的なミスですね、きっと。助けてくれてありがとう。

于 2013-03-15T20:48:06.237 に答える
1

の最後に 2 つの \n が必要です

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

1つだけではなく。

試してください: print "Content-Type: text/html\n\n"

https://httpd.apache.org/docs/2.2/howto/cgi.html#writingを参照

于 2013-03-15T20:00:44.340 に答える