Шрифт
URI — сложно о простом (Часть 1)
Play

URI — сложно о простом (Часть 1)

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

"Пфф, ссылки они и в Африке ссылки, чего тут разбираться?" — скажете вы, тогда я задам вопрос:

  • http://example.com
  • www.example.com
  • //www.example.com
  • mailto:user@example.com

Перед тем как начать хотел бы обозначить, что есть пост на схожую тему, в котором все обозначено проще и немного понятнее. Целью же этого поста, я ставлю более глубокое изучение вопроса и сбор информации об URI в одном месте, дабы «не потерять». Ну, почти в одном месте, статья будет разделена на две части А для удобства бахнем оглавление, которое работает не без особенностей URI, которую мы рассмотрим попозжа, в этой статье.

    1.1. Синтаксис1.2. Компоненты URI2.1. Структура3.1. Структура

Ознакомление

1. URI

Унифицированный Идентификатор Ресурса, в простонародье — URI Самое свежее описание того, чем же все-таки являются эти пресловутые URI датируется январем аж 2005-го, а именно RFC3986, написанный самим Тимом Бёнесом-Ли, родоначальника всеми нами любимого тырнета. Резюмируя п.1.1 можно сформулировать определение:

  • перейдя по http://example.com — мы попадем на http-сервер ресурса идентифицируемого как example.com
  • в то же время ftp://example.com — приведет наc на ftp-сервер того же самого ресурса
  • или например http://localhost/ — URI идентифицирующий саму машину откуда производится доступ
  • URL — Uniform Resource Locator, помогает найти какой либо ресурс
  • URN — Uniform Resource Name, помогает этот ресурс идентифицировать

Многие из вас замечали, что на разных ресурсах ссылки называют то URL, то URI и, вероятно, становилось интересно — какой же из вариантов правильный? Дело в том, что URL увидел свет и был документирован в 1990 году, в то время как URI был документирован лишь в 1994 году. И вплоть до 2002 года, до выхода RFC3305, уместными были оба варианта именования, что, порой вносило путаницу. В п.2 RFC3305 сообщается об устаревании такого термина как URL, применимо к ссылкам, и что отныне верным будет именование URI, с того момента, во всех документах W3C использует термин URI. Исходя из этого, применяя термин URL к соответствующим ссылкам, вы не делаете смысловой ошибки, но делаете ее с точки зрения правильного именования.

Так же примечателен тот момент, что вплоть до выхода RFC2396, в 1997 году, URI расшифровывался как Universal Resource Identifier, что можно увидеть в RFC1630

Обобщая всевозможные варианты, URI имеет следующий вид:

  • либо scheme+authority+path ,
  • либо sheme+path ,
  • либо только path .
1.1. Синтаксис Зарезервированные символы
    gen-delims, они же «главные разделители», т.е. символы, разделяющие URI на крупные компоненты.
Процентное кодирование

Т.о., %20, например, означает пробел.

1.2. Компоненты URI
    Scheme (схема)Каждый URI начинается с имени схемы, которое относится к спецификации для присвоения идентификаторов в этой схеме. Также, синтаксис URI — объединенная и расширяемая система именования, причем, спецификация каждой схемы может далее ограничить синтаксис и семантику идентификаторов, использующих эту схему. Название схемы обязательно начинается с буквы и далее может быть продолжено любым количеством разрешенных символов. Разрешенные символы для схемы:
2. URL 2.1. Структура

В целом, URL имеет схожую структуру, для всех схем, хотя для каждой отдельно взятой схемы, структура может отличаться от общего шаблона. Графически ее можно выразить в следующем виде:

    Относительная ссылка использует иерархический синтаксис, чтобы выразить ссылку URI относительно пространства имен другого иерархического URI. Относительные ссылки так же делятся на несколько подвидов:
      Ссылка сетевого путиИмеет вид:

      — откроет http://example.com — по-идее должен открыть http://habrahabr.ru/topic/232385/www.example.com , но хабр сам исправляет ссылку, хотя по стандартам www.example.com — ссылка относительного пути — откроет www.example.com со схемой с которой вы просматриваете текущую страницу, т.е. скорее всего будет открыт http://example.com — здесь уже вступают в силу настройки браузера, он предложит вам открыть эту ссылку при помощи почтовой программы и отправить электронное письмо адресату user@example.com , а так, это абсолютный URL со схемой mailto
    3. URN

    Т. е., в отличие от URL, который ссылается на како-то место, где хранится документ, URN ссылается на сам документ, и при перемещении документа в другое место ссылка не изменится. В силу того, что URN концептуально отличается от URL, то и система разрешения имен у него другая — DDDS , которая преобразует URN в URL, по которым можно найти ресурс/объект или что бы то ни было, на что ссылается URN.

    3.1. Структура
    • «urn:» — обязательная, регистронезависимая часть URN
    • NID — Namespace Identifier, данная компонента определяет синтаксическую интерпретацию компоненты NSS. Минимальная длина — 2 символа, максимальная — 32, разрешенные символы:
    Самоидентифицирующийся URN

    Такие URN содержат в NID название хэш-функции, а в NSS значение хэша, вычисленного для идентифицируемого объекта. Такие ссылки используются в magnet-ссылках и заголовках p2p-сети Gnutela2. Например, URN из magnet-ссылки с одного торрент-трекера: magnet:?xt=urn:btih:c68abc1ba9b8c7c4bc373862cad1a8c01d69e53d.

    С теорией все, во второй части рассмотрим, что можно и что нужно делать с URI, если мы их обрабатываем, а именно — нормализация, разбор и т.д.

    📎📎📎📎📎📎📎📎📎📎