Раскрытие URI, URL и URN
Это руководство дает обзор URI, URL и URN, объясняя их различия и случаи использования.
При разработке веб-приложений нам часто приходится вызывать различные веб-сервисы. При настройке связи и подключения различных веб-сервисов мы часто сталкиваемся с такими понятиями, как URI, URL и URN. Обычно пользователям трудно различать их, что приводит к смешанному или неправильному использованию. В этой статье мы приведем примеры и объясним различия между ними, чтобы помочь всем лучше понять эти концепции и правильно интерпретировать и использовать их при чтении технических блогов, документации или общении с другими инженерами.
Что такое URL?
URL (определитель местоположения ресурса) указывает веб-адрес или местоположение ресурсов в интернете. В основном он используется для указания местоположения веб-страниц, файлов или сервисов. URL предоставляет стандартизированный формат для доступа к ресурсам в сети. Это ключевой компонент веб-браузинга, линковки и интернет-коммуникации.
URL состоит из нес кольких частей, которые вместе определяют адрес ресурса и протокол, используемый для доступа к нему. Давайте рассмотрим следующий URL в качестве примера и объясним функцию каждой части одну за другой.
-
Схема: Указывает протокол или схему, используемую для доступа к ресурсам, например, HTTP (протокол передачи гипертекста), HTTPS (безопасный HTTP), FTP (протокол передачи файлов) или другие.
Схема в данном URL —
https
. -
Хост: Хост указывает доменное имя или IP-адрес сервера, который содержит ресурс.
Хост в данном URL —
example.logto.io
. -
Порт: (Необязательно) Порт представляет собой конкретный номер порта на хосте для доступа к ресурсу. Если порт не указан, используется стандартный порт для данной схемы.
Стандартный порт для HTTP — 80, для HTTPS — 443.
Порт в данном URL —
8080
. -
Путь: (Необязательно) Путь указывает конкретное местоположение или директорию на сервере, где находится ресурс, который может включать директории и имена файлов.
Путь в данном URL должен быть
/blogs/index.html
. -
Параметры запроса: (Необязательно) Параметры запроса — это дополнительные параметры, передаваемые ресурсу, обычно используемые в динамических веб-приложениях. Они появляются после пути и разделяются символом
?
.Параметры запроса в данном URL —
params1=value1¶m2=value2
, что чаще всего представляется в виде пар «ключ-значение», разделенных символом&
. В реальных сценариях использования часто требуется кодирование для избегания символов, таких как пробелы. -
Идентификатор фрагмента: (Необязательно) Также может называться якорем, используется для указания на конкретное место в ресурсе.
Якорь в данном URL —
#introduction
.
Кроме того, например, использование файловых сервисов или многих кнопок "Свяжитесь с нами" на веб-страницах ссылаются на URL, такие как:
ftp://documents.logto.io/files/legal/soc_ii.pdf
mailto:[email protected]?subject=Enterprise%20quota%20request
Что такое URI?
URI означает "определитель ресурсов". Это строка символов, которая идентифицирует конкретный ресурс, такой как веб-страница, файл или сервис. URI предоставляет способ уникально идентифицировать и находить ресурсы, используя стандартизированный формат.
URI в основном состоит из двух компонентов:
- Схема: Указывает протокол или схему, используемую для доступа к ресурсу.
- Идентификатор ресурса: Идентифицирует конкретный ресурс, к которому осуществляется доступ или на который делается ссылка. Формат идентификатора ресурса зависит от используемой схемы.
С грамматической точки зрения URI в основном следуют тому же формату, что и URL, как это указано в RFC 3986.
Хотя этот формат URI схож с форматом URL, он не гарантирует доступ к каким-либо ресурсам в Интернете. Использование этого формата может снизить конфликты имен в пространстве имен.
В приведенном выше разделе мы представили URL, который не только идентифицирует ресурс, но и помогает найти этот ресурс. Так что, на самом деле, URL — это правильное подмножество URI.
Что такое URN?
URN может быть не так распространен, как URL и URI. Он означает "унифицированное имя ресурса" и служит для идентификации ресурсов постоянным образом, даже если такие ресурсы больше не существуют.
В отличие от URL, URN не предоставляет никакой информации о том, как найти ресурс; он просто идентифицирует его, подобно чистому URI. Конкретно URN — это тип URI со схемой "urn" и имеет следующую структуру, как описано в RFC 2141:
<URN>:<NID>:<NSS>
- URN: Обычно
urn
. - Идентификатор пространства имен (NID): Представляет уникальное пространство имен или систему идентификаторов, которая определяет и управляет URN. Он предоставляет контекст и гарантирует уникальность идентификатора. Примеры пространств имен включают ISBN (международный стандартный номер книги) и т. д.
- Специфическая строка пространства имен (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 можно проиллюстрировать с помощью следующей диаграммы Венна:
URI, URL и URN могут использоваться для идентификации различных ресурсов, но только URL может точно определить местоположение ресурса.
URI и URL могут поддерживать различные схемы, такие как HTTP, HTTPS, FTP, но URN можно считать поддерживающим только схему urn
.
Все URL или URN являются URI, но не все URI являются URL или URN.