質問

python cgiが受け取ったhttpリクエストを見つけるにはどうすればよいですか? HEADとGETには異なる動作が必要です。

ありがとう!

役に立ちましたか?

解決

import os

if os.environ['REQUEST_METHOD'] == 'GET':
    # blah

他のヒント

これはあなたの質問に対する直接的な答えではありません。しかし、あなたの質問は物事を間違った方法で行うことに起因します。

Python CGIスクリプトを記述しないでください。

mod_wsgi アプリケーションを作成します。さらに良いのは、Python Webフレームワークを使用することです。たくさんあります。 Werkzeug のようなものを選択します。

WSGI標準( PEP 333 で説明)により、 、ウェブリクエストで簡単に見つけることができます。

mod_wsgi実装はCGIよりも高速で安全です。

Webフレームワークは、独自のCGIスクリプトやmod_wsgiアプリケーションを記述するよりも簡単です。

GETとHEADを区別する必要があるのはなぜですか?

通常、HEADリクエストを区別せず、GETのように扱う必要があります。これは、HEADリクエストがGETとまったく同じヘッダーを返すことを意図しているためです。唯一の違いは、応答コンテンツがないことです。応答コンテンツがないからといって、有効なContent-Lengthヘッダー、または応答コンテンツに依存する他のヘッダーを返す必要がなくなるわけではありません。

さまざまな人が指摘しているmod_wsgiでは、実際には、HEADを誤って扱う人を防ぐために、特定の場合に要求メソッドを実際にHEADからGETに変更します。これが行われる特定のケースは、Apache出力フィルターが登録されている場合です。この場合に行われる理由は、出力フィルターが応答コンテンツを参照し、そこから追加の応答ヘッダーを生成することを期待するためです。 HEADリクエストの応答コンテンツを生成しないことにした場合、コンテンツの出力フィルターを奪い、追加するヘッダーがGETリクエストから返される内容と一致しない場合があります。この結果、キャッシュとブラウザの操作を詰めることができます。

Apacheの背後にあるCGIスクリプトにも同じことが当てはまります。その場合、出力フィルターも追加できるためです。 CGIスクリプトの場合、ユーザーがバカになったり、HEADリクエストに対して別のことをしたりするのを防ぐ手段はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top