Кратко
- Относительная ссылка опускает то, что уже даёт известная база: так уменьшается повторение и группа документов может переехать вместе.
- Разрешение ссылки — детерминированное синтаксическое преобразование: выбор абсолютной базы, наследование или замена компонентов, слияние путей, удаление точечных сегментов и сборка цели.
- В отрыве от базы относительная ссылка не является устойчивым глобальным идентификатором; доказательства, подписи и аудит должны сохранять выбранную базу либо абсолютный результат.
Документ уже знал часть адреса
Абсолютный локатор повторяет схему, источник и зачастую большую часть пути. Но документ со ссылками уже был получен из некоторого места, и это место даёт контекст.
RFC 1630, предложение Тима Бернерса-Ли 1994 года, описывал частичную форму внутри объекта с известным URI. Выигрыш состоял не только в сокращении строки. Связанные объекты можно было перемещать вместе, не меняя каждое ребро: изменения на верхних уровнях оставались невидимыми для локальных документов.
Вне контролируемого контекста документ рекомендовал полную форму. Короткая ссылка не переносит опущенные сведения; её переносимость зависит от того, будет ли база перенесена вместе с ней или восстановлена.
Косая черта и полные сегменты . и .. выражали иерархию. Конечная черта тоже имела значение: база, похожая на каталог, и база, похожая на ресурс, одалживают разные пути.
Относительный URL стал стандартным преобразованием
В июне 1995 года RFC 1808 определил относительный URL по отношению к абсолютной базе. База давала схему, сетевое местоположение и часть пути, а ссылка выражала изменение.
Это не было простым сложением строк. Ссылка со схемой становилась абсолютной. Сетевой путь заменял источник. Начальная / заменяла путь от корня. Относительный путь сливался с базовым. У запроса и фрагмента были собственные правила.
Если коллекция переезжала с прежней иерархией, её относительные связи сохранялись. Абсолютная ссылка продолжала вести к прежнему источнику. Две записи выбирали разные зависимости.
HTML переносил недостающий контекст
RFC 1866, спецификация HTML 2.0 1995 года, разрешала относительные цели в якорях, ссылках, изображениях, полях ввода и формах. Необязательный BASE задавал документу абсолютный адрес, когда его читали вне контекста получения.
Удобство сосредоточило контроль. Одна встроенная база переосмысливала все относительные цели. Значение, устранявшее повторение префикса, тем самым получало влияние на весь граф ссылок.
База — не декоративные метаданные. Она участвует в определении идентичности; удалить её, заменить или применить на другой стадии — значит изменить решение.
Общий синтаксис разделил наследование по компонентам
В 1998 году RFC 2396 распространил разрешение на ссылки URI. Схема, источник, путь, запрос и фрагмент сначала разбирались, а затем поставлялись ссылкой, наследовались либо заменялись.
Для относительного пути последний сегмент базы удаляется, ссылка присоединяется, после чего обрабатываются точечные сегменты. Поэтому конечная косая черта меняет результат. Однако путь URI не тождествен файловой системе: общее значение имеют только . и .. как полные сегменты, а точки внутри имени остаются данными.
Разрешение не обращается к серверу. Оно создаёт идентификатор; получение, перенаправление, авторизация и проверка существования происходят позже.
Современное правило сначала выбирает базу
RFC 3986 требует известной базы, за исключением узкого случая ссылки на фрагмент. База должна быть абсолютной, а её собственный фрагмент перед разрешением отбрасывается.
Источники базы имеют порядок: значение внутри содержимого, база охватывающей сущности, URI получения и настройка приложения. Несколько контекстов превращаются в один фактический вход алгоритма.
Ссылка со схемой поставляет свои компоненты. Начало // наследует схему и заменяет источник. / наследует схему и источник, но заменяет путь. Относительный путь сливается со всеми сегментами базового пути, кроме последнего; если у базы есть источник, но путь пуст, слияние начинается с /.
Пустой путь наследует базовый путь, а при отсутствии нового запроса — и базовый запрос. Фрагмент результата приходит из ссылки.
Точечные сегменты были временными инструкциями
remove_dot_segments выполняется после разбора и слияния. Полный сегмент . не добавляет уровень, а .. удаляет предыдущий, когда тот существует. Лишние подъёмы обрабатываются алгоритмом, а не пересекают воображаемый универсальный корень.
Это синтаксическая операция, не проверяющая каталоги. Даже понятие «тот же документ» определяется после разрешения сравнением абсолютного результата с базой, а не внешним видом короткой записи.
Переносимость была управляемой зависимостью
Относительные ссылки сделали коллекцию переносимой, потому что внутренние связи не называли постоянный узел. Но опущенная часть адреса всё равно всегда поступала из документа, контейнера, операции получения или приложения.
Доказательство, где осталась только строка ../источник, теряет смысл отдельно от базы. Манифест, подписавший короткий текст, но не базу, оставляет часть цели вне подписи. Журнал, хранящий лишь итог, не показывает решение, которое его породило.
Долговечное свидетельство поэтому хранит исходную ссылку, выбранную базу и разрешённую цель, если по ней совершалось действие.
Источники
- RFC 1630, Universal Resource Identifiers in WWW: https://www.rfc-editor.org/rfc/rfc1630.html
- RFC 1808, Relative Uniform Resource Locators: https://www.rfc-editor.org/rfc/rfc1808.html
- RFC 1866, Hypertext Markup Language — 2.0: https://www.rfc-editor.org/rfc/rfc1866.html
- RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax: https://www.rfc-editor.org/rfc/rfc2396.html
- RFC 3986, Uniform Resource Identifier (URI): Generic Syntax: https://www.rfc-editor.org/rfc/rfc3986.html
Эти документы подтверждают историю и алгоритм, но не особенности современных браузеров или безопасность конкретного приложения.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
