В чем разница между scriptName и pathInfo в JSGI/Level0/A/Draft2?

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

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

1 ответ

Решение

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

Другие вопросы по тегам