Нормализацией URL называют процесс приведения различных URL к единообразному виду. Целью процесса нормализации является преобразование URL в нормализованный вид, с тем, чтобы определить эквивалентность двух синтаксически различных URL-адресов.
Предположим, что у нас есть два URL-адреса, которые для человеческого глаза, явно отличаются. При этом мы не можем утверждать, что эти адреса ведут на разные страницы или к разным файлам. Причина кроется в особенностях написания URL-адресов: они могут быть написаны разными регистрами, в них могут использоваться управляющие конструкции, порт по умолчанию и многие другие нюансы.
Если говорить о практической стороне вопроса, то нормализацию URL используют поисковые системы и веб-браузеры. Первым она помогает избегать повторного сканирования ресурсов и снизить индексацию дубликатов страниц. Вторым помогает определить, была ли ранее посещена данная страница и находится ли она в кэше.
Нормализация с сохранением исходного написания
Конвертация в нижний регистр — компоненты схемы и хоста не чувствительны к регистру, и большинство нормализаторов конвертирует URL в нижний регистр. Пример:
HTTP://www.Example.com/ → http://www.example.com/
Перевод в верхний регистр управляющих конструкций — все символы с процентным указателем являются зависимыми от регистра, поэтому они должны быть переведены в верхний регистр. Пример:
http://www.example.com/a%c2%b1b → http://www.example.com/a%C2%B1b
Перекодировка управляющих конструкций в явные символы — для связанности процентные конструкции переводятся в понятные символы: альфа (%41-%5A и %61-%7A), цифровые (%30—%39), дефис (%2D), точка (%2E), подчёркивание (%5F) или тильда (%7E) создаваться не должны. Когда такие URI находятся с процентными конструкциями, они должны быть переведены в символы. Например:
http://www.example.com/%7Eusername/ → http://www.example.com/~username/
Удаление используемого по умолчанию порта — порт по умолчанию (тот же порт 80 для протокола HTTP) может быть удалён из URL. Например:
http://www.example.com:80/bar.html → http://www.example.com/bar.html
Нормализация с частичным сохранением исходного написания
Добавление конечной косой черты — применяется для демонстрации того, что URL относится к каталогу. Например:
http://www.example.com/alice → http://www.example.com/alice/
Удаление сегментов-точек — сегменты «..» и «.» могут быть удалены из URL. Например:
http://www.example.com/../a/b/../c/./d.html → http://www.example.com/a/c/d.html
Нормализация с изменением написания
Удаление головного индекса:
http://www.example.com/default.asp → http://www.example.com/
http://www.example.com/a/index.html → http://www.example.com/a/
Удаление фрагментов — хотя фрагменты URL и могут быть удалены, стоит учитывать, что приложения на AJAX часто используют переменные в таких фрагментах и их удаление может привести к перенаправлению на другой ресурс.
http://www.example.com/bar.html#section1 → http://www.example.com/bar.html
Замена IP-адреса именем домена:
http://208.77.188.166/ → http://www.example.com/
Сокращение идентификаторов протоколов — различные протоколы прикладного уровня, например, HTTPS, могут быть переведены в HTTP. Например:
https://www.example.com/ → http://www.example.com/
Удаление дублированных слешей — два соседних слеша в пути можно преобразовать в один. Например:
http://www.example.com/foo//bar.html → http://www.example.com/foo/bar.html
Удаление или добавление «www» как элемента верхнего доменного уровня — бывает, что сайты оперируют двумя Интернет-доменами: с «www» и без. Обычно веб-сайты перенаправляют пользователя с www-адреса на адрес без «www», но бывает и наоборот.
http://www.example.com/ → http://example.com/
http://example.com/ → http://www.example.com/
Сортировка параметров запросов — иногда веб-страницы используют более одного параметра в URL. Алгоритмы нормализации могут отсортировать параметры в алфавитном порядке (с сохранением их значений) и пересоздать URL. Например:
http://www.example.com/display?lang=en&article=fred → http://www.example.com/display?article=fred&lang=en
Однако порядок параметров в URL может быть значимым (это не определяется стандартами) и веб-сервер может позволять переменным появляться несколько раз.
Удаление неиспользуемых переменных в запросе — страница может ожидать только определённые параметры. В таком случае неиспользуемые параметры можно удалить. Например:
http://www.example.com/display?id=123&fakefoo=fakebar → http://www.example.com/display?id=123
Учитывайте, что отсутствие значения у параметра не указывает на то, что параметр не используется.
Удаление параметров запроса по умолчанию — значение параметров по умолчанию в строке запроса могут показывать одинаковый результат, даже если они не будут указаны. Например:
http://www.example.com/display?id=&sort=ascending → http://www.example.com/display
Удаление «?» при пустом запросе — обычно, если запрос пустой, то и символ «?» оказывается бесполезным. Например:
http://www.example.com/display? → http://www.example.com/display
Подробнее с нормализацией URL можно ознакомиться в стандарте RFC 3986.
Статьи по теме: