В чем разница между scriptName и pathInfo в JSGI / Level0 / A / Draft2? - PullRequest
1 голос
/ 16 августа 2011

Я использую RingoJS 0.8 и создал базовое приложение jsgi поверх экземпляра ringo / httpserver.Я пытаюсь понять назначение каждого ключа в объекте запроса jsgi в соответствии со спецификацией: http://wiki.commonjs.org/wiki/JSGI/Level0/A/Draft2;, и я понял большинство ключей, сохраняю ключ scriptName.

Когда я запускаю свойapplication и распечатывает значения каждого ключа, scriptName всегда возвращает пустую строку, а pathInfo возвращает путь к URL-адресу.Я пытаюсь понять, что scriptName на самом деле должен передавать и чем он отличается от pathInfo.

1 Ответ

2 голосов
/ 13 октября 2011

scriptName и pathInfo лучше всего понимаются, если принять во внимание исторический фон CGI, поскольку именно отсюда берутся эти поля.

С CGI-скриптами у вас естьструктура каталогов на стороне сервера, которая содержит CGI-скрипт в некотором месте.Для CGI работа веб-сервера заключается в сопоставлении URL-адресов в HTTP-запросах со сценариями 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/httpserver Ринго, сопоставление имен сценариев вообще не выполняется, так как ваше приложение всегда считается работающим в корне (то есть соответствует * 1026).* URL-путь).Если ваше основное приложение делегируется другим приложениям JSGI, тогда вам нужно решить (и документально подтвердить), если и как вы установите scriptName и pathInfo.

...