• uri
  • url
  • urn

Раскрытие URI, URL и URN

Это руководство дает обзор URI, URL и URN, объясняя их различия и случаи использования.

Darcy Ye
Darcy Ye
Developer

При разработке веб-приложений нам часто приходится вызывать различные веб-сервисы. При настройке связи и подключения различных веб-сервисов мы часто сталкиваемся с такими понятиями, как URI, URL и URN. Обычно пользователям трудно различать их, что приводит к смешанному или неправильному использованию. В этой статье мы приведем примеры и объясним различия между ними, чтобы помочь всем лучше понять эти концепции и правильно интерпретировать и использовать их при чтении технических блогов, документации или общении с другими инженерами.

Что такое URL?

URL (определитель местоположения ресурса) указывает веб-адрес или местоположение ресурсов в интернете. В основном он используется для указания местоположения веб-страниц, файлов или сервисов. URL предоставляет стандартизированный формат для доступа к ресурсам в сети. Это ключевой компонент веб-браузинга, линковки и интернет-коммуникации.

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

  1. Схема: Указывает протокол или схему, используемую для доступа к ресурсам, например, HTTP (протокол передачи гипертекста), HTTPS (безопасный HTTP), FTP (протокол передачи файлов) или другие.

    Схема в данном URL — https.

  2. Хост: Хост указывает доменное имя или IP-адрес сервера, который содержит ресурс.

    Хост в данном URL — example.logto.io.

  3. Порт: (Необязательно) Порт представляет собой конкретный номер порта на хосте для доступа к ресурсу. Если порт не указан, используется стандартный порт для данной схемы.

    Стандартный порт для HTTP — 80, для HTTPS — 443.

    Порт в данном URL — 8080.

  4. Путь: (Необязательно) Путь указывает конкретное местоположение или директорию на сервере, где находится ресурс, который может включать директории и имена файлов.

    Путь в данном URL должен быть /blogs/index.html.

  5. Параметры запроса: (Необязательно) Параметры запроса — это дополнительные параметры, передаваемые ресурсу, обычно используемые в динамических веб-приложениях. Они появляются после пути и разделяются символом ?.

    Параметры запроса в данном URL — params1=value1&param2=value2, что чаще всего представляется в виде пар «ключ-значение», разделенных символом &. В реальных сценариях использования часто требуется кодирование для избегания символов, таких как пробелы.

  6. Идентификатор фрагмента: (Необязательно) Также может называться якорем, используется для указания на конкретное место в ресурсе.

    Якорь в данном URL — #introduction.

Кроме того, например, использование файловых сервисов или многих кнопок "Свяжитесь с нами" на веб-страницах ссылаются на URL, такие как:

  • ftp://documents.logto.io/files/legal/soc_ii.pdf
  • mailto:[email protected]?subject=Enterprise%20quota%20request

Что такое URI?

URI означает "определитель ресурсов". Это строка символов, которая идентифицирует конкретный ресурс, такой как веб-страница, файл или сервис. URI предоставляет способ уникально идентифицировать и находить ресурсы, используя стандартизированный формат.

URI в основном состоит из двух компонентов:

  1. Схема: Указывает протокол или схему, используемую для доступа к ресурсу.
  2. Идентификатор ресурса: Идентифицирует конкретный ресурс, к которому осуществляется доступ или на который делается ссылка. Формат идентификатора ресурса зависит от используемой схемы.

С грамматической точки зрения URI в основном следуют тому же формату, что и URL, как это указано в RFC 3986.

Хотя этот формат URI схож с форматом URL, он не гарантирует доступ к каким-либо ресурсам в Интернете. Использование этого формата может снизить конфликты имен в пространстве имен.

В приведенном выше разделе мы представили URL, который не только идентифицирует ресурс, но и помогает найти этот ресурс. Так что, на самом деле, URL — это правильное подмножество URI.

Что такое URN?

URN может быть не так распространен, как URL и URI. Он означает "унифицированное имя ресурса" и служит для идентификации ресурсов постоянным образом, даже если такие ресурсы больше не существуют.

В отличие от URL, URN не предоставляет никакой информации о том, как найти ресурс; он просто идентифицирует его, подобно чистому URI. Конкретно URN — это тип URI со схемой "urn" и имеет следующую структуру, как описано в RFC 2141:

<URN>:<NID>:<NSS>

  1. URN: Обычно urn.
  2. Идентификатор пространства имен (NID): Представляет уникальное пространство имен или систему идентификаторов, которая определяет и управляет URN. Он предоставляет контекст и гарантирует уникальность идентификатора. Примеры пространств имен включают ISBN (международный стандартный номер книги) и т. д.
  3. Специфическая строка пространства имен (NSS): Это строка символов, которая уникально идентифицирует ресурс в указанном пространстве имен. Сам идентификатор не содержит информации о местоположении или способе доступа к ресурсу.

Например, очень известная книга, вводящая в компьютерные системы CSAPP, имеет свой номер ISBN, представленный как URN urn:isbn:9780134092669.

URN часто используется в различных стандартных протоколах, таких как ассерция в протоколе SAML, которая соответствует URN urn:oasis:names:tc:SAML:2.0:assertion.

В программной инженерии мы также можем определять URN для конкретных целей в наших собственных системах в соответствии с правилами именования URN. Например, в Logto, чтобы включить Организацию, вам нужно добавить область urn:logto:scope:organizations в конфигурацию при использовании SDK. У каждой Организации также есть свой собственный URN urn:logto:organization:{orgId}.

Заключение

Отношение между URI, URL и URN можно проиллюстрировать с помощью следующей диаграммы Венна:

Relations

URI, URL и URN могут использоваться для идентификации различных ресурсов, но только URL может точно определить местоположение ресурса.

URI и URL могут поддерживать различные схемы, такие как HTTP, HTTPS, FTP, но URN можно считать поддерживающим только схему urn.

Все URL или URN являются URI, но не все URI являются URL или URN.