Как стать автором
Обновить

ЧПУ. Очевидное — невероятное

Время на прочтение 4 мин
Количество просмотров 5K
Думаю, никому не надо рассказывать, что такое ЧПУ. В интернетах хватает евангелистов-фетишистов, ратующих за человеко-понятность в урлах.

При желании, ознакомиться с основной идеей можно, например, в Википедии.

Я же попробую уточнить и несколько доосмыслить эту идею.

Расширения


Что такое расширение файла? Это, грубо говоря, короткий алиас к mime-типу этого файла. Например, если у файла расширение gif, то мы ожидаем, что содержимое файла соответствует типу image/gif, если html — то text/html, js — text/javascript и т. д.

И обычно результат соответствует ожиданию. Но бывают исключения:

vkontakte.ru/newsfeed.php
ru.msn.com/iat/us_ru.aspx
www.opennet.ru/cgi-bin/opennet/man.cgi

Что мы видим в запросе? php, aspx и cgi. А что получаем в ответ? Правильно, text/html.

Почему же? Понятно почему. На сервере это действительно php, aspx и cgi. html-ем оно выглядит только «снаружи». Ничто, конечно, не мешает показывать эти файлы наружу с другим, правильным расширением. Но этого обычно не делают. Потому что считается, что это не проблема — пользователю всё равно (по крайней мере, мы привыкли так думать), а разработчику и админу так проще.

Считать ли эту проблему достойной решения вопрос открытый. Но мы, по крайней мере, можем утверждать, что

Расширения у html-файлов в вебе обычно не просто не несут никакой полезной пользователю информации, а прямо вводят в заблуждение.

Папки, файлы и страницы


Что такое папка? Это, если по-простому, способ группирования файлов. А что такое папка в контексте сайта? Ответ не так очевиден, как может показаться на первый взгляд.

Да, со стороны веб-сервера это всё ещё способ группирования файлов. Но так ли это для пользователя? Нет, не так. И вот почему.

Позволю себе утверждать (опираясь, в основном, на личный опыт общения с пользователями-не-гиками), что пользователь не воспринимает сайт как часть файловой системы, как набор разрозненных файлов и папок. Сайт для пользователя, это набор связных страницы. Да, конечно, страница продолжает быть файлом. В контексте HTTP html-файл ничем не примечателен, это точно такой же файл, как png или js. И HTTP не знает ничего ни о каких страницах.

Для пользователя же, ничего не знающего про TCP/IP, HTTP и HTML, разница огромна. Страница — это некая магическая субстанция, с картиночками, кнопочками, ссылочками. А файл — это просто файл. Его можно скачать, положить рядом с другими файлами и он ничем не будет от них отличаться. Там тоже, конечно, есть своя магия, но она не имеет отношения к интернету (читай, вебу). Страница же существует только пока открыт браузер. Да, её тоже можно скачать, но тогда пропадёт вся особая магия интернета — ссылочки перестанут кликаться, кнопочки — нажиматься и выглядеть она будет, скорее всего, совсем не так, как «в интернете». В общем, это будет мёртвая страница.

Итак, страница — не файл. Страница — это страница.

Но если файл — больше не файл, то что же тогда такое папка? Файлов нет, а папки есть? В папку же можно заглянуть и увидеть там файлы. А тут — нельзя. А если таки попытаться, то увидишь не её содержимое, а другую страницу. Так какая же это папка? А это и не папка. Это страница и есть.

То есть, для пользователя нет никакой разницы между запросом к файлу и запросом к папке, если в результате он видит страницу.

А если нет разницы, то зачем их различать? Не надо их различать, надо отказаться от расширений, а запросы со слешом на конце и без него сделать синонимами друг друга.

/news.php — непонятно (к тому же, неправда, ведь в ответ приходит не php, а html)
/news — гораздо лучше
/news/ — и так тоже хорошо

Последний вариант используют Гугл, Хабр и Студия Лебедева. Что как бы намекает :)

Страница — это не файл и не папка, страница — это страница.

Параметры


Параметры запроса — главный враг человеко-понятности. Собственно, ЧПУ и призваны, в первую очередь, избавить пользователя от параметров в урлах. По возможности.

Здесь мне добавить особо нечего. Да, некрасиво. Да, нечитаемо. Да, надо избавляться.

Вот только, к сожалению, не всегда это возможно. Хотелось бы совсем от них отказаться, но не выйдет. В сложных гридах, например, без параметров никак.

/catalogue.php?sect=11&kind=6 — некрасиво
/catalog/11/16/ — немногим лучше (пример из Википедии)
/catalogue/light/bulbs/ — уже неплохо (этот пример теперь тоже есть в Википедии)

Параметры — главный враг человеко-понятности.

Язык


Есть ещё один важный момент, который, почему-то, обычно опускают, рассуждая о ЧПУ, это язык урла. Естественный язык (обычно, английский).

Возьмём пример (почти) идеальной реализации ЧПУ, сайт Студии Артемия Лебедева (я, кстати, только при написании статьи обнаружил, что они отказались от расширений для html-файлов, ещё недавно они были, причём, не какие-нибудь php или py, а честные html):

www.artlebedev.ru/everything/optimus

Замечательный урл. Но, всё же, что-то в нём не так, вы не находите? Что-то едва заметно режет глаз. Что же?

А ведь части адреса не вполне соответствуют названиям разделов/страниц. Раздел «Наше всё» представлен в урле словом everything, а страница про клавиатуру «Оптимус» — словом optimus.

Язык сайта исключительно русский. То есть, чтобы воспользоваться сайтом, я должен владеть русским и только русским. Урлы, между тем, все английские. То есть, чтобы воспользоваться сайтом мне достаточно знать русского, а чтобы воспользоваться удобствами ЧПУ нужен ещё и английский. Причём, он мне понадобиться только для этого, не для чего больше.

Странноватое исключение, вы не находите?

Все названия дублируются на инородном, по отношению к контенту сайта, языке. С какой целью? Это удобно. Нет. Очевидно? Нет.

Почему бы не написать /всё/оптимус/? Или, даже /всё/Оптимус/.

Так делает Википедия, а также все проекты фонда Викимедиа и некоторые другие сервисы на базе Медиавики.

Да, у кириллицы в урлах есть очевидные проблемы. Проблемы при пересылке таких ссылок почтой или мессенджерами. Проблемы при цитировании таких ссылок в блогах и форумах. Да, проблемы есть, но их немного и кажется, это не слишком большая цена за красивые, понятные, очевидные урлы, помогающие в навигации?

PS. Я намеренно опустил все нюансы реализации подобных урлов, чтобы сосредоточиться на теории. Реализацию, при желании, можно обсудить отдельным топиком. Есть желание? :)

PPS. Подскажите, куда лучше переложить топик, ничего лучше Веб-стандартов я не придумал.
Теги:
Хабы:
-6
Комментарии 68
Комментарии Комментарии 68

Публикации

Истории

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн