ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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 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" -->

но это похоже скорее на костыль.

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.