サーバー側のスクリプトの理解に役立つ


8

私が理解している限り、最近サーバーサイドスクリプトを実行するための3つのオプションがあります。

  1. Webサーバーで直接解釈/実行できるスクリプト言語(PHPやASPなど)を使用して、スクリプトがその場で解釈/実行される(つまり、HTTPリクエストが来たときに)、出力はHTMLページに埋め込まれます。クライアントに送り返しました。

  2. サーバーのオペレーティングシステムは、任意の言語(C、C ++、PERL、Pythonなど)を使用して(インタープリターを使用するか、コンパイル済みの実行可能ファイルを使用して)、CGIを使用してWebサーバーとOSの間で通信できます。 。スクリプトの出力は、CGIを介して完全なHTMLページの形式でサーバーに送られ、クライアントに送り返されます。

  3. サーブレット/ JSPを処理できるサーバーでJavaを使用することは、PHP / ASPの代わりにJavaを使用することを除いて、上記のオプション1とほぼ同じです。

質問

  1. 私の理解はこれまでのところ順調ですか、それとも何か問題がありましたか?

  2. ASPおよびPHPは、Webサーバーによって直接解釈および実行できる唯一の言語ですか?

  3. Rubyは上記の分類にどこに分類されますか?PHPなどのサーバーで解釈/実行できますか?それともCGI経由で通信しますか?

  4. CGIを介したサーバーサイドスクリプティングは時代遅れになったり、まったくなくなったりしますか?

回答:


10

あなたが過去からであるならば、あなたの理解は正しいです。それは1990年代のように見えたので、あなたはかなり説明しています。

はい、多くの言語はWebサーバープラグインによって直接実行できます。PHPの場合、Apacheのmod_phpは、依然としてホストする最も一般的な方法です。ただし、トラフィック量の多いサイトは、WebサーバーをFastCGIのプロキシとしてのみ使用する、より最新のアプローチを使用します(PHPの場合は、PHP-FPMです)。

出力はHTMLページに埋め込まれ、クライアントに送り返されます。

90年代前半のいわゆるスパゲッティコードについて言及していると思いますが、最近のアプローチは、多くのMVCフレームワークの1つを使用することです。PHPの場合は、たとえばZend Frameworkを意味します(多数の代替案があります)。

ASPに関しては、おそらく「クラシックASP」と呼ばれていますが、これは古いものです。現在はASP.NETです。これは、.NET言語(C#が最も一般的)のいずれかを使用でき、もちろん.NETフレームワークです。

CおよびC ++は通常、Webアプリケーションでは使用されません。その場合、そのようなサービスは、スタンドアロンサーバー、Webサーバーのモジュール、またはFastCGIとして実装されます。

Perlは、mod_perlを使用してWeb サーバーモジュールから直接実行できます。PSGIもあります。これは基本的にPythonのWSGIのクローンです。

PythonはWebアプリで非常に人気のある言語です。mod_pythonを介してApache Webサーバーから直接実行できますが、これは廃止されており、推奨されません。現在、Pythonを使用する方法は、WSGIサーバーモジュールを使用する方法です。Pythonで実装されたWSGIサーバー(CherryPy、WebPyなど)またはスタンドアロンのPython Webスタックを使用(TornadoとTwistedのWebモジュールが良い例です)。そしてもちろん、あなたはおそらくWSGI互換のMVCフレームワークを使用するでしょう。Djangoが最も人気のあるものです(ここでも、複数の代替が利用可能です)。

Ruby、これもWebアプリで非常に人気のある言語です。MVCであるWebフレームワークRuby on Railsで最もよく知られています。Rubyはmod_rubyまたはFastCGIを介してサーバーモジュールから直接実行できます。

サーブレット/ JSPは、JBossやTomcatなどのスタンドアロンJ2EEアプリケーションサーバーで実行されます。スタンドアロンのWebアプリを作成するのではなく、Webインターフェイスをビジネスシステムに追加するために一般的に使用されます。

従来のCGI(つまり、各リクエストでのスポーンプロセス)は、何年も前に廃止されました。これは、FastCGI(プロセスが各要求で生成されるのではなく、長時間実行される)、サーバーモジュール、WSGIやクローンなどのインターフェース、およびスタンドアロンソリューションに置き換えられました。

また、リクエスト処理のパラダイムが進化し、CGIではリクエストごとに処理されました。次に、プロセスプール(またはスレッドプール)があり、各プロセス(スレッド)は一度に1つの要求を処理していました。しかし現在、最も最近のアプローチは、Webサーバーとスタンドアロンフレームワークがイベント駆動型プログラミングを使用することです。


Djangoはニュースサイトなどの主にCMSだと思いました。eコマースサイトのように、通常のWebサイトを構築するために使用できますか?
aml90

1
@amalantony djangoはWebフレームワークです。これは、CMSのようなソフトウェアの作成に役立つガイドラインとライブラリのセットです。
Burhan Khalid

1
@amalantony:burhanが言ったように、DjangoはCMSではなくWebフレームワークです。これはCMSのビルドに使用でき、その上に複数のCMSパッケージ(djangopackages.com/grids/g/cms)だけでなく、eコマース(djangopackages.com/grids/g/ecommerce)と他のあらゆるものがありますあなたは考えることができます。
vartec

7

これは、何が起こるかについての非常に一般的で単純化された見解であると言って、序文を述べます。

Webサーバーソフトウェア(ApacheやIISなど)はコードを解釈しません。方法がわかりません。方法を知っているのは、要求を受け取り、それをファイルシステム上のある場所で検索し、要求された項目をブラウザーに送り返すことだけです。それだけです-非常に単純なレベルで。これが、Apacheをインストールし、phpファイルをに追加したときDocumentRootに、実行されたPHPの結果が得られない理由です。ファイルだけを戻します。

サーバーにファイルの提供以外の処理を行わせるための最初のステップは、特定のファイルが要求されたときに別の処理実行するように指示するコードを追加することです。それ以外の場合は、デフォルトのMIMEタイプ(通常はtext / plain)に従ってファイルを提供しようとするだけです。これが、正しく構成されていないサーバーがあり、を要求すると、意図した結果ではなく、ファイルのソースコードが表示される理由です。index.php

したがって、WebサーバーにPHPを「理解」させるには、.php拡張子が付いたファイルのリクエストが来たときに何をするかをサーバーに指示する必要がありますmod_php。構成できますか?)、ファイルを読み取り、コードを実行し、結果をコンパイルします。結果をサーバーに送り返し、サーバーは結果をクライアントに配信します。次に、末尾が.phpであるすべてのファイルがmod_phpで処理されるように、Webサーバーを構成します。

この基本的なワークフローは、他の言語にも適用されます。唯一の違いは、サーバーが要求を「オフロード」する対象です。

PHPの場合は上記で説明されていますが、同様にmod_python、およびfastcgiwsgiおよびWebサーバーが処理するように設計されていないオフロード要求に関する他の確立されたプロトコルがあります。

最も一般的な実装には、特定のポート(またはソケット)で要求を待機する長時間実行プロセスがあります。Webサーバーはプロキシとして構成され、特定のパターン一致するすべてのリクエストをこの長期実行プロセスに渡し、結果を読み取ります。

これが、Ruby on Rails(ラック)、Pythonスクリプト(WSGIを使用)の動作方法です。

これは、nginxのような単純なプロキシのようなWebサーバーが非常に人気がある理由でもあります。これらは、従来のWebサーバーの非常に基本的なタスクのみを実行します。「静的」ファイルを提供し、PHP、Python、ASPなどを処理するために他のプロキシサーバーにリクエストをオフロードするのに優れています。al。

つまり、最終的に、静的ファイルなど、処理を必要としないものすべてを処理するWebサーバーができます。

コードの処理方法を知っている別のプロセスがあります(たとえば、PHPインタープリターを実行するプロセス、またはuWSGIサーバー)。これはWebサーバーからの要求を待機します。

最後に、これらのプロセスを管理するupstartやスーパーバイザーなどのシステムがあります。

これで問題が明確になることを願っています。


感謝しました。さらに質問:PHPとASPは、スクリプトをページに直接埋め込むことができる唯一の言語(index.phpなど)になるのはなぜですか?
Daniel Scocco

@daniels彼らはそうではない-私はあなたがASP.NETページにC#またはVB.NETを埋め込むことができることを知っている-もっとあるはずだ...
Murph

@daniels:他の人ができないことではありません。それは、マークアップをロジックから分離する方が良いということは長い間受け入れられてきたことです。必要に応じて、ERBファイルに大量のRubyを書き込むか、aspxファイルにC#を書き込むことができます。
pdr

0

最も「深刻な」で使用される4番目のオプションがあります。銀行や他の金融サービスなどのWebサイト:CGIに少し似ているn層アプローチ。ただし、CGIプロセスは別のサーバーで実行されますが、Webサーバーコードは非常に薄く(データをhtmlに再フォーマットするのに十分なほど)、「 RPCやSOAPなどのネットワークプロトコルを介したcgiのサービス。

クライアントブラウザーからのhttpリクエストとビジネスロジックをホストする「コードエンジン」の間のゲートウェイとしてWebサーバーを使用する、それでも基本的なアプローチは同じです。この場合、ウェブサーバーはリクエストを1つの言語(PHPやXSLTなど)のスクリプトエンジンに渡し、スクリプトエンジンは生データを提供する別のサービスを呼び出します。ウェブスクリプトは、そのデータをhtmlにフォーマットするためにのみ使用されます。ブラウザに配信されるページ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.