В чем разница между 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
,