web-dev-qa-db-ja.com

平易な英語のWSGIおよびCGIとは何ですか?

WSGIまたはCGIを読むたびに、うんざりします。私は前にそれを読んでみましたが、何も本当に行き詰っていません。

普通の英語では本当に何ですか?

リクエストを端末にパイプし、出力をリダイレクトするだけですか?

116
Blankman

WSGIは、Webサーバープロセスの一部(埋め込みモード)または別のプロセス(デーモンモード)として、Webサーバーの起動時にPythonインタープリターを実行し、スクリプトを読み込みます。各リクエストスクリプト内の特定の関数が呼び出され、その関数に引数としてリクエスト環境が渡されます。

CGIは、リクエストごとに個別のプロセスとしてスクリプトを実行し、環境変数、stdin、およびstdoutを使用して「通信」します。

完全に後退した観点から、Blankmanが、Webサービスゲートウェイインターフェースの「紹介ページ」です。

パート1:Webサーバー

Webサーバーは応答を提供します。彼らはじっと座って、辛抱強く待った後、突然警告なしで突然:

  • クライアントプロセスが要求を送信します。クライアントプロセスは、Webサーバー、ボット、モバイルアプリなどです。それは単に「クライアント」です
  • webサーバーはこのリクエストを受信します
  • 意図的なつぶやきさまざまなことが起こります(以下を参照)
  • Webサーバーはクライアントに何かを送り返します
  • webサーバーが再び座る

Webサーバー(少なくとも、優れたサーバー)はこれに非常に優れています。彼らは需要に応じて処理をスケールアップおよびダウンし、本当にひどいネットワークを介して信頼性の高いクライアントとの会話を確実に保持し、私たちはそれについて本当に心配する必要はありません。彼らはただ奉仕し続けます。

これが私のポイントです。Webサーバーはまさにそのサーバーです。彼らはコンテンツについて何も知らず、ユーザーについても何も知らず、実際には多くのことを待って確実に返信する方法以外何も知りません。

Webサーバーの選択は、ソフトウェアではなく配信設定を反映する必要があります。 Webサーバーは、処理や論理的なものではなく、サービスを担当する必要があります。

パート2:(PYTHON)ソフトウェア

ソフトウェアは存在しません。ソフトウェアは実行時にのみ存在します。ソフトウェアは、環境の予期しない変更(ファイルが予期した場所にない、パラメータの名前が変更されているなど)に対応するために、ひどく対応していません。 (もちろん)最適化は設計の中心的な原則であるべきですが、ソフトウェア自体は最適化されません。開発者は最適化します。ソフトウェアが実行されます。ソフトウェアは、上記の「意図的なつぶやき」セクションのすべてのことを行います。何でもいいです。

ソフトウェアの選択または設計は、Webサーバーの選択ではなく、アプリケーション、機能の選択を反映する必要があります。

これは、Webサーバーに言語を「コンパイル」する従来の方法が苦痛を感じる場所です。物理サーバー環境に対処するためにアプリケーションにコードを配置するか、少なくとも、実行時に含める適切な「ラッパー」ライブラリーを選択することを余儀なくされて、Webサーバー全体の均一性の錯覚を与えます。

SO WHAT IS WSGI?

それで、最後に、WSGIとは何ですか? WSGIは2つの半分で記述された一連のルールです。それらは、統合を歓迎するあらゆる環境に統合できるように書かれています。

Webサーバー側用に書かれた最初の部分は、「OK、WSGIアプリケーションを処理したい場合、ロード時にソフトウェアがどのように考えるかを示します。アプリケーションで利用できるようにする必要があるものは次のとおりです。すべてのアプリケーションに期待できるインターフェイス(レイアウト)です。さらに、何か問題が発生した場合に、アプリがどのように考え、どのように動作するかを期待できます。」

Pythonアプリケーションソフトウェア用に書かれた2番目の部分は、「OK、WSGIサーバーに対処したい場合、サーバーがあなたに連絡したときの考え方を以下に示します。サーバーで利用できるようにする必要があります。すべてのサーバーに期待できるインターフェイス(レイアウト)があります。さらに、何か問題が発生した場合の動作と、サーバーへの指示を示します。

サーバーがサーバーになり、ソフトウェアがソフトウェアになります。ここでは、一方が他方の詳細を許可することなく、非常にうまくいく方法を紹介します。これはWSGIです。

一方、mod_wsgiはApacheのプラグインであり、WSGI準拠のソフトウェアと通信できます。つまり、mod_wsgiはimplementation-in Apache-上記のルールブックのパート1のルール。

CGIについては...他の誰かに尋ねてください:-)

231
Mark Henwood

このスペースのすべての用語について不明な点があり、それに直面しようとすると、頭字語が混同されて混乱します。 official python = HOWTO CGI vs. FastCGI vs. WSGIなどについて議論しています。

19

CGIとWSGIはどちらも、プログラムがWeb要求を処理するために使用できる標準インターフェイスを定義します。 CGIインターフェースはWSGIよりも低いレベルにあり、サーバーはHTTPリクエストからのデータを含む環境変数を設定します。プログラムは、ベアHTTPサーバーレスポンスのようなフォーマットを返します。

一方、WSGIは、プログラマーがサーバーに依存せず、他のWSGIアプリケーション(ミドルウェア)にラップできるアプリケーションを作成できるようにする、Python固有のやや高レベルのインターフェイスです。

18
Wooble