Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re[2]: SSI include и пробел в URI
Sat, 11 Dec 2010 15:43:33 +0300 письмо от Igor Sysoev <igor@xxxxxxxxx>:
> On Sat, Dec 11, 2010 at 03:38:38PM +0300, Дмитрий Дедюхин wrote:
>
> >
> >
> >
> > Sat, 11 Dec 2010 14:41:50 +0300 письмо от Igor Sysoev
> <igor@xxxxxxxxx>:
> >
> > > On Sat, Dec 11, 2010 at 10:24:09AM +0300, Дмитрий Дедюхин wrote:
> > >
> > > > Fri, 10 Dec 2010 19:23:51 +0300 письмо от Andrey Repin
> > > <hell-for-yahoo@xxxxxxxx>:
> > > >
> > > > > Здравствуйте, Уважаемый(-ая, -ое) Dmitry Dedukhin!
> > > > >
> > > > > DD> Столкнулся с проблемой.
> > > > >
> > > > > DD> <!--# set var="arg" value="1
> 1" -->
> > > > > DD> <!--# include
> virtual="/backend?arg=$arg" -->
> > > > >
> > > > > DD> При обработке запроса в апаче получаю ошибку
> "request
> > > failed:
> > > > > erroneous
> > > > > DD> characters after protocol string", т.к. в
> адресной
> > > строке пробел
> > > > > между
> > > > > DD> единицами так и остался пробелом, а не превратился
> в %20
> > > > >
> > > > > DD> Это можно как-то обойти?
> > > > >
> > > > > Явно написать 1%201
> > > > > Программа работает в предположении, что ты знаешь, чего от
> неё
> > > хочешь.
> > > >
> > > > Дело в том, что значение переменной в данном случае возвращает
> сторонний
> > > бэкенд.
> > > > Конкретно в моем случае его можно научить делать encodeURI.
> > > > Но мне кажется, что было бы неплохо, если бы nginx сам
> кодировал
> > > переменные в include virtual
> > >
> > > Вообще-то странно, что стороннему бэкенду позволительно формировать
> SSI.
> >
> > Ничего странного.
> > Он не совсем сторонний, это бекенд для быстрой проверки авторизации
> >
> > <!--# include virtual="/check_auth" -->
> >
> > который в случае авторизованности пользователя возвращает данные его
> профиля в виде SSI-инструкций вида
> >
> > <!--# set var="ID" value="1234567" -->
> > <!--# set var="Nick" value="my_nick" -->
> > <!--# set var="FullName" value="Some Name" -->
> >
> > Далее, в кеше nginx'а лежит закешированная страница с SSI-вставкой
> некешируемого блока
> >
> > <!--# if expr="$ID" -->
> > <!--# include
> virtual="/backend?id=$ID&nick=$Nick&fullname=$FullName"
> -->
> > <!--# endif -->
> >
> > Т.е. мы уже проверили авторизацию и передаем данные от авторизационного
> бекенда своему...Но получаем ошибку из-за наличия пробела в
> > переменной FullName.
> > Естественно, авторизационный бекенд можно научить возвращать данные в
> виде
> >
> > <!--# set var="FullName" value="Some Name" -->
> > <!--# set var="FullName_encoded"
> value="Some%20Name" -->
> >
> > но это похоже скорее на костыль.
>
> А если бэкенд уже прислал закодированное - кодирвать повторно ?
Хм, резонное замечание.
Можно было бы по аналогии с командой echo сделать
<!--# include virtual="/backend" encoding="none|url" -->
Но не уверен, что это хорошая идея.
Тогда вопрос закрыт, будем править бэкенд.
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|