4

ASP.NET Core アプリケーションのさまざまなホスティング オプションを評価しています。ASP.NET の新しいプログラミング モデルでは、リクエストを一連のミドルウェア (古いIHttpModule&の混合物IHttpHandler) で処理します。

認証、静的ファイルの処理、または送信前の応答の圧縮を担当できるミドルウェアを使用できます (いくつか例を挙げると)。ここで混乱が生じます。

責任のコンテキストでサーバーとアプリの境界をどこに設定するか?

応答を圧縮するのはどちらの側ですか? IIS では、これはサーバーによって処理され、web.config で構成されていました。Kestrel はこの機能を提供していないため、これを処理するカスタム ミドルウェアをアプリに実装する必要があります。どちらがより適切ですか?

認証はどうですか?IIS は、認証 (匿名、偽装、フォーム認証) の設定を提供します。反対に、ASP.NET Core では、これを処理できるアプリ ミドルウェアを作成することもできます。

わかりました。SSLはサーバーによって処理されます。これは、プロトコル層の下にあり、アプリが HTTP(S) でのみ動作するためです。

サーバーにはどのような責任がありますか? アプリにはどのような責任がありますか?

4

2 に答える 2

1

ウィキペディアで述べたように:

「Web サーバーの主な機能は、Web ページを保存、処理し、クライアントに配信することです」

問題は、すべての有名な http サーバー (nginx、apache、IIS など) には、質問で言及したもの (認証、圧縮など) を含むさまざまなタスクを処理できる多くのモジュールが付属していることです。

追加するモジュールが多いほど、http サーバーが最も遅くなる可能性が非常に高くなります。たとえば、IIS は最速の http サーバーであるとは言えませんが、すべてのモジュールを削除してリソースを提供するためだけに使用すると、IIS は非常に高速になります。日々!

責任の問題は、あらゆる種類のソフトウェア アプリケーションで同じです。
主な役割がデータの格納であるデータベースについて考えてみてください。Oracle や SQL Server などの RDBMS は、それが得意です。しかし、新しいバージョンをリリースするとすぐに、データの保存とは関係のない新しい機能もリリースします。そして人々はそれを使用します!;-)
DB を検索エンジンとして使用した回数は? SQL Server でメールを送信している人を見ました。しかし、さらに悪いことに、ストア プロシージャ内で Web サービスを呼び出そうとする人もいました ;-)

1 つのツールですべてを実行したいという気持ちは常にありますが、すべての目的のために構築されているわけではないことを覚えておく必要があります。代わりに、1 つの責任を持ち、それを正しく処理する一連の軽量ツールを使用したいと思います。

質問に戻りますが、ミドルウェアを利用するのは良いアプローチだと思います。そうすれば、パイプライン全体を制御でき、リクエストが何を通過したかを正確に把握できます。ミドルウェアもテスト可能!不要なモジュールをすべて取り除くと、間違いなくより軽量な http サーバーになります。

「場合による」という正当な答えも受け入れられます。いくつかのテストを行って、gzip 圧縮モジュールがミドルウェアよりも 10 倍高速であることがわかった場合は、モジュールを使用してください。どちらも独断的にならないでください!

于 2016-02-04T20:05:26.963 に答える