Re: 0.7.63 и выдача flv

Igor Sysoev igor на sysoev.ru
Пт Дек 18 15:16:32 MSK 2009


On Fri, Dec 18, 2009 at 02:57:41PM +0300, Sergey Shepelev wrote:

> 2009/12/18 Igor Sysoev <igor at sysoev.ru>:
> > On Fri, Dec 18, 2009 at 02:25:20PM +0300, Sergey Shepelev wrote:
> >
> >> 2009/12/18 Igor Sysoev <igor at sysoev.ru>:
> >> > On Fri, Dec 18, 2009 at 05:59:10AM -0500, Yury wrote:
> >> >
> >> >> ну то есть правильнее будет написать:
> >> >> location ~ \.flv(\?start=[0-9]+)?$ {...}
> >> >>
> >> >> как-то так....
> >> >
> >> > query string не тестируется в location. Потому что в query string можно
> >> > написать чего угодно, например:
> >> >
> >> >   /1.flv?чего-то-там&start=5
> >> >   /1.flv?start=5&ещё-чего-то-там
> >> >   /1.flv?как-то-так&start=5&ещё-чего-то-там
> >> >
> >> > И как это предлагается тетсировать ?
> >> >
> >>
> >> Вы же сами предлагали XSL синтаксис для расширения тестов location.
> >>
> >> Например, так.
> >>
> >> location ~ \.flv$
> >> ["start=" in $args]
> >> {
> >>   root /foo;
> >>   flv;
> >> }
> >
> > Да, но это не имеет отношения к обсуждаемой теме. Люди почему-то считают
> > в location нужно указывать аргументы. При этом почему-то не задумаываются,
> > что
> >   /index.php?user=one&page=1
> > можно записать и как
> >   /index.php?page=1&user=one
> >
> 
> ээ... а /foo можно записать как /bar. Это всё разные урлы.

Потому что URI без query string однозначно определяет запрос, а
query string - нет. Например, /favicon.ico?чего-то-там - это всегда
файл /favicon.ico, независимо от "чего-то-там". А /baricon.ico
это всегда 404, тоже назависимо от "чего-то-там".

> Стандарт вообще говорит, что URI это path?query-string. Формат a=b&c=d
> это частный случай. Реально существует форум vbulletin, который делает
> урлы типа member.php?15. Это я к тому, что мы обсуждаем проблему
> одного частного случая. Даже если он сильно распространён.
> 
> Интерпретация query аргументов в любом случае не на плечах nginx. В
> частности, и считать разный порядок кусков текста разделенных &
> разными или одинаковыми урлами. Ну, ещё хороший вариант - разбить
> $query_string по & и упорядочить получившийся массив строк по
> алфавиту. Тогда однозначно понятно, как именно писать location, но это
> медленно. По-моему, нормальный компромисс.

Нормальный компромисс - это 

 location ~ \.flv$ [ $arg_start ] {

> Уверен, что вы это всё знаете, но тогда я не понимаю озабоченности
> различием двух урлов выше. Будут обращаться, мол, у меня не матчится
> криво написанный локейшн?

Потому что тогда теряет смысл

 location = / {

потому что придётся писать "~ ^/($|\?)". Зачем регекс там, где достаточно
простого сравнения.


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru