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.cgi
CGI 脚本,/foo/bar.cgi
作为“脚本名称”传递,其余/baz/qux
作为“路径信息”传递给这个 CGI 脚本。
然而,在 JSGI 中,如何完成 URL 到 JSGI 应用程序的映射基本上取决于服务器和潜在的中间件。可能有一个基于模拟文件系统的查找机制在起作用,将原始请求的路径拆分为“脚本名称”和“路径信息”仍然有意义。或者可能没有。
如果您在 Ringo 的 bare 上运行ringo/httpserver
,则根本不会进行脚本名称映射,因为您的应用程序始终被认为是在根目录运行(即对应于/
URL 路径)。如果您的主应用程序委托给其他 JSGI 应用程序,则由您决定(并记录)您是否以及如何设置scriptName
和pathInfo
.