私のpython cgiが受け取ったhttpリクエストをどのようにして知ることができますか?私はHEADとGETのために異なった振る舞いが必要です。python cgiからhttpリクエストタイプ(GET、HEADなど)を検出します
ありがとうございます!
私のpython cgiが受け取ったhttpリクエストをどのようにして知ることができますか?私はHEADとGETのために異なった振る舞いが必要です。python cgiからhttpリクエストタイプ(GET、HEADなど)を検出します
ありがとうございます!
import os
if os.environ['REQUEST_METHOD'] == 'GET':
# blah
これはあなたの質問に対する直接的な回答ではありません。しかし、あなたの質問は間違ったやり方から始まります。
Python CGIスクリプトを作成しないでください。
mod_wsgiアプリケーションを作成してください。さらに良い方法は、PythonのWebフレームワークを使用することです。数十があります。 Werkzeugのような1つを選択します。
WSGI標準(PEP 333に記載されています)は、Webリクエストで多くのものを見つけるのがずっと簡単です。
mod_wsgiの実装は、CGIより高速で安全です。
Webフレームワークは、独自のCGIスクリプトまたはmod_wsgiアプリケーションを作成するよりも簡単です。
私はmod_wsgiを調べますが、これはすぐに一時的な解決策に過ぎません。すぐにdangoに移行する予定です。 – cfischer
なぜGETとHEADを区別する必要がありますか?
通常、GETのようにHEADリクエストを区別して処理する必要があります。これは、HEAD要求がGETとまったく同じヘッダーを返すためのものであるためです。唯一の違いは、応答内容がないことです。ただし、応答コンテンツがないため、有効なContent-Lengthヘッダーや応答コンテンツに依存するその他のヘッダーを返す必要がなくなりました。
さまざまな人々があなたを指し示しているmod_wsgiでは、HEADを別の方法で間違って扱っている人たちを守るために、HEADからGETへと意図的にリクエストメソッドを変更することがあります。これが行われる特定の場合は、Apache出力フィルタが登録される場所です。この場合、出力フィルタが応答内容を確認し、それから追加の応答ヘッダーを生成することが予想されるためです。 HEADリクエストのレスポンスコンテンツを生成しないと決定した場合は、コンテンツの出力フィルタが奪われ、追加するヘッダがGETリクエストから返されるものと一致しなくなる可能性があります。この結果として、キャッシュとブラウザの操作を補充することができます。
Apacheの後ろにあるCGIスクリプトにも同じことが適用できます。その場合でも出力フィルタを追加できます。 CGIスクリプトでは、HEAD要求に対してユーザーがばかげていて、やり方を変えるのを防ぎますが、何もありません。
一部の有効なリンクチェッカーは、HEADメソッドを使用して自分のサイトのリソースにアクセスします。彼らは無害です。 OTOH、gazillionボットは同じリソースへのGETアクセスで自分のサイトを削除しています。だから私はその違いを伝える必要があります。 – cfischer
あなたが望まないリクエストを取得している場合は、書き換えモジュールやヘッダーの検査を可能にする他のモジュールを使用してエージェント文字列を調べることで、サーバ上でブロックしようとしているはずです。なぜそれはまだCGIスクリプトに進む必要がありますか? –
なぜmod_wsgiを使用していませんか? –
私はそれが何であるか分からないので。 O :-) – cfischer