2011-08-16 8 views
1

私はRingoJS 0.8を使用しており、ringo/httpserverインスタンスの上に基本的なjsgiアプリケーションを作成しました。私は、仕様に応じてjsgiリクエストオブジェクト内の各キーの目的を理解しようとしています:http://wiki.commonjs.org/wiki/JSGI/Level0/A/Draft2;私はほとんどのキーを理解して、scriptNameキーを保存してください。JSGI/Level0/A/Draft2のscriptNameとpathInfoの違いは何ですか?

アプリケーションを実行して各キーの値を出力すると、scriptNameは空の文字列を返しますが、pathInfoはURLのパス名を返します。私はscriptNameが実際に伝えるべきものと、それがpathInfoとどのように違うのかを理解しようとしています。

答えて

2

scriptNameおよびpathInfoは、CGIの歴史的背景を考慮すると、これらのフィールドがどこから生じるかが最もよく理解できます。

CGIスクリプトには、サーバー側のディレクトリ構造があります。このディレクトリ構造には、ある場所にCGIスクリプトが含まれています。 CGIの場合、Webサーバーの仕事はHTTPリクエストのURLをCGIスクリプトにマップすることです。このマッピングプロセスでは、基本的にURLのパスをコンポーネントに分割し、ルートディレクトリから開始して各コンポーネントをディレクトリ名またはファイル名にマッピングします。コンポーネントがファイル名にマッチすると、実行するCGIスクリプトが見つかります。ファイル名までのすべてのURLパスコンポーネントはCGIに「スクリプト名」として渡され、残りの(不一致)URLパスのコンポーネントはCGIスクリプトに「パス情報」として渡されます。

この抽象的な説明と例を説明しましょう。あなたのファイルシステムにCGIスクリプトが/x/y/foo/bar.cgiに格納されているとしましょう。ここで/x/y/はリクエストをマップするためにウェブサーバーが使用するルートディレクトリです。 /foo/bar.cgi/baz/quxというURLのリクエストがあった場合、Webサーバーは/x/y/foo/bar.cgi CGIスクリプトと一致し、/foo/bar.cgiを「スクリプト名」に、残りの/baz/quxをこのCGIスクリプトの「パス情報」として渡します。

しかし、は日本情報地質学会にそれは基本的にサーバーと日本情報地質学会のアプリへのURLのマッピングがどのように行われるか潜在的なミドルウェア次第です。 は、オリジナルの要求のパスを「スクリプト名」と「パス情報」に分割することがなお理にかなっている、作業中のアナログファイルシステムベースのルックアップメカニズムとなります。そうでないかもしれない。

リンゴの裸ringo/httpserverを実行すると、アプリは常にルート(つまり、/ URLパスに対応)で実行されているとみなされるため、スクリプト名のマッピングは一切行われません。あなたの主なアプリが他のJSGIアプリに委譲されている場合は、scriptNamepathInfoを設定したかどうか、および設定する方法を決定(文書化)してください。

関連する問題