1

我正在使用 RingoJS 0.8,并在 ringo/httpserver 实例之上创建了一个基本的 jsgi 应用程序。我试图根据规范了解 jsgi 请求对象中每个键的用途:http ://wiki.commonjs.org/wiki/JSGI/Level0/A/Draft2 ;我了解了大部分键,保存 scriptName 键。

当我运行我的应用程序并打印每个键的值时,scriptName 总是返回一个空字符串,而 pathInfo 返回 URL 的路径名。我试图了解 scriptName 实际应该传达的内容以及它与 pathInfo 的不同之处。

4

1 回答 1

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/是您的网络服务器用于将请求映射到的根目录。如果对 URL 的请求进入/foo/bar.cgi/baz/qux,网络服务器会将这个请求匹配到/x/y/foo/bar.cgiCGI 脚本,/foo/bar.cgi作为“脚本名称”传递,其余/baz/qux作为“路径信息”传递给这个 CGI 脚本。

然而,在 JSGI 中,如何完成 URL 到 JSGI 应用程序的映射基本上取决于服务器和潜在的中间件。可能有一个基于模拟文件系统的查找机制在起作用,将原始请求的路径拆分为“脚本名称”和“路径信息”仍然有意义。或者可能没有。

如果您在 Ringo 的 bare 上运行ringo/httpserver,则根本不会进行脚本名称映射,因为您的应用程序始终被认为是在根目录运行(即对应于/URL 路径)。如果您的主应用程序委托给其他 JSGI 应用程序,则由您决定(并记录)您是否以及如何设置scriptNamepathInfo.

于 2011-10-13T01:38:27.883 回答