ユーザーからのリクエストとかが詰まった「env」っていうオブジェクトを受け取って「ステータスコード、HTTPレスポンスヘッダとボディ」を返すアプリケーション。コネクションの管理とかはしない。たんじゅんにenvっていうオブジェクトを受け取って結果を返す、ふつうの Ruby のクラス。
たんじゅんにenvを受け取って結果を返すだけのものだから、一枚wrapすることで「本体のRackアプリケーションにenvを渡す前にちょこっとenv書き換えたれ」とか「本体から帰ってきたレスポンス書き換えたれ」とかが簡単にできる。これがRackミドルウェア。
Sinatra とか Rails で書いたアプリケーションの実体はRackアプリケーションである(というかRackアプリケーションにできる)。言い方を変えると、Sinatraとかは「Rackアプリケーションを作るためのフレームワーク」である。
HTTPリクエストを受け取って、環境変数とかといっしょにした env を作る。そしたら env をRackアプリケーションに渡して、Rackアプリケーションから受け取ったステータスコード、HTTPレスポンスヘッダとボディをHTTPレスポンスとして返す。という動きをするサーバー。
unicornとか。
という認識