Унифицированный идентификатор ресурса ( URI ) — это уникальная последовательность символов, которая идентифицирует логический или физический ресурс, используемый веб-технологиями. URI могут использоваться для идентификации чего угодно, включая объекты реального мира, такие как люди и места, концепции или информационные ресурсы, такие как веб-страницы и книги. Некоторые URI предоставляют средства поиска и получения информационных ресурсов в сети (либо в Интернете, либо в другой частной сети, например, в файловой системе компьютера или в интрасети ); это унифицированные указатели ресурсов (URL). URL-адрес указывает местоположение ресурса. URI идентифицирует ресурс по имени в указанном местоположении или URL-адресе. Другие URI предоставляют только уникальное имя без средств поиска или получения ресурса или информации о нем; это унифицированные имена ресурсов (URN). Веб-технологии, использующие URI, не ограничиваются веб-браузерами. URI используются для идентификации всего, что описано с использованием структуры описания ресурсов (RDF), например, концепций, которые являются частью онтологии , определенной с использованием языка веб-онтологий (OWL), и люди, которые описаны с использованием словаря друга друга, будут каждый иметь индивидуальный URI.
URI и URL-адреса имеют общую историю. В 1990 году предложения Тима Бернерса-Ли по гипертексту неявно представили идею URL-адреса как короткой строки, представляющей ресурс, являющийся целью гиперссылки . [1] В то время люди называли его «гипертекстовым именем» [2] или «именем документа».
В течение следующих трех с половиной лет, по мере развития основных технологий Всемирной паутины, таких как HTML, HTTP и веб-браузеры, возникла необходимость отличать строку, предоставляющую адрес ресурса, от строки, которая просто называет ресурс. Хотя термин «Единый указатель ресурса» еще не определен формально, он стал обозначать первый, а более спорное «Единое имя ресурса» — второе. В июле 1992 года в отчете Бернерса-Ли о IETF «UDI (универсальные идентификаторы документов) BOF » упоминаются URL-адреса (как унифицированные указатели ресурсов), URN (первоначально как уникальные номера ресурсов) и необходимость создания новой рабочей группы. [3] В ноябре 1992 года «Рабочая группа URI» IETF встретилась впервые. [4]
В ходе дебатов по поводу определения URL-адресов и URN стало очевидно, что концепции, воплощенные в этих двух терминах, являются всего лишь аспектами фундаментального, всеобъемлющего понятия идентификации ресурса . В июне 1994 года IETF опубликовала первый запрос Бернерса-Ли на комментарии , в котором признавалось существование URL-адресов и URN. Самое главное, он определил формальный синтаксис для универсальных идентификаторов ресурсов (т.е. строк, подобных URL-адресам, точный синтаксис и семантика которых зависели от их схем). Кроме того, в RFC 1630 была предпринята попытка обобщить синтаксис схем URL-адресов, использовавшихся в то время. Он признал, но не стандартизировал , существование относительных URL-адресов и идентификаторов фрагментов. [5]
В декабре 1994 года RFC 1738 формально определил относительные и абсолютные URL-адреса, уточнил общий синтаксис URL-адресов, определил, как преобразовать относительные URL-адреса в абсолютную форму, и лучше перечислил схемы URL-адресов, которые использовались в то время. [6] Согласованному определению и синтаксису URN пришлось подождать до публикации IETF RFC 2141 [7] в мае 1997 года.
Публикация IETF RFC 2396 [8] в августе 1998 года привела к тому, что синтаксис URI стал отдельной спецификацией [9] , а большинство частей RFC 1630 и 1738, касающихся URI и URL-адресов в целом, были пересмотрены и расширены IETF . В новом RFC значение буквы «U» в «URI» изменено на «Uniform» с «Universal».
В декабре 1999 года RFC 2732 [10] предоставил незначительное обновление RFC 2396, позволяющее URI включать адреса IPv6 . Ряд недостатков, обнаруженных в двух спецификациях, привел к усилиям сообщества, координируемым соавтором RFC 2396 Роем Филдингом , которые завершились публикацией IETF RFC 3986 [11] в январе 2005 года. сделать устаревшими детали существующих схем URL-адресов; RFC 1738 продолжает регулировать такие схемы, если иное не заменено. Например, IETF RFC 2616 [12] уточняет эту схему. Одновременно IETF опубликовал содержание RFC 3986 как полный стандарт STD 66, что отражает установление общего синтаксиса URI в качестве официального протокола Интернета.http
В 2001 году Группа технической архитектуры (TAG) W3C опубликовала руководство по лучшим практикам и каноническим URI для публикации нескольких версий данного ресурса. [13] Например, контент может отличаться в зависимости от языка или размера в зависимости от емкости или настроек устройства, используемого для доступа к этому контенту.
В августе 2002 года IETF RFC 3305 [14] указал, что термин «URL», несмотря на широкое публичное использование, практически устарел и служит лишь напоминанием о том, что некоторые URI действуют как адреса, имея схемы, предполагающие доступность сети, независимо от того, любого такого фактического использования. Как ясно показывают стандарты, основанные на URI, такие как Resource Description Framework , идентификация ресурсов не обязательно предполагает получение представлений ресурсов через Интернет, а также не обязательно подразумевает сетевые ресурсы.
Семантическая сеть использует схему HTTP URI для идентификации как документов, так и концепций для практического использования, и это различие привело к путанице в том, как их различать. В 2005 году TAG опубликовал электронное письмо с решением проблемы, которое стало известно как резолюция httpRange-14 . [15] Впоследствии W3C опубликовал заметку группы по интересам под названием Cool URI для семантической сети , в которой более подробно объяснялось использование согласования контента и кода ответа HTTP 303 для перенаправления. [16]
Единое имя ресурса (URN) — это URI, который идентифицирует ресурс по имени в определенном пространстве имен. URN может использоваться для описания ресурса, не подразумевая его местонахождение или способ доступа к нему. Например, в системе Международного стандартного номера книги (ISBN) ISBN 0-486-27557-4 идентифицирует конкретное издание пьесы Шекспира « Ромео и Джульетта» . URN для этого издания будет urn:isbn:0-486-27557-4 . Однако он не дает никакой информации о том, где найти копию этой книги.
Унифицированный указатель ресурса (URL) — это URI, который определяет средства воздействия на ресурс или получения его представления, т. е. указывает как его основной механизм доступа, так и сетевое расположение. Например, URL-адрес http://example.org/wiki/Uniform_Resource_Identifier/Main_Page
относится к ресурсу, обозначенному как /wiki/Uniform_Resource_Identifier/Main_Page
, представление которого можно получить через протокол передачи гипертекста ( http: ) от сетевого узла с доменным именем example.org
. (В этом случае HTTP обычно подразумевает, что он представлен в форме HTML и связанного с ним кода. На практике это не обязательно так, поскольку HTTP позволяет указывать произвольные форматы в своем заголовке.)
URN аналогичен имени человека, а URL-адрес аналогичен его почтовому адресу. Другими словами, URN идентифицирует элемент, а URL-адрес предоставляет метод его поиска.
Технические публикации, особенно стандарты, выпускаемые IETF и W3C , обычно отражают точку зрения, изложенную в Рекомендации W3C от 30 июля 2001 г., которая признает приоритет термина URI, а не одобряет какое-либо формальное подразделение на URL и URN.
URL — это полезное, но неформальное понятие: URL — это тип URI, который идентифицирует ресурс через представление его основного механизма доступа (например, его сетевое «местоположение»), а не через какие-то другие атрибуты, которые он может иметь. [17]
Таким образом, URL-адрес — это просто URI, который указывает на ресурс в сети. [a] [18] Однако в нетехническом контексте и в программном обеспечении для Всемирной паутины термин «URL» по-прежнему широко используется. Кроме того, термин «веб-адрес» (который не имеет формального определения) часто встречается в нетехнических публикациях как синоним URI, использующего схемы http или https . Такие предположения могут привести к путанице, например, в случае пространств имен XML, которые имеют визуальное сходство с разрешимыми URI.
Спецификации, разработанные WHATWG, отдают предпочтение URL-адресу , а не URI , поэтому новые API HTML5 используют URL-адрес , а не URI . [19]
Стандартизируйте термин URL. URI и IRI [интернационализированный идентификатор ресурса] просто сбивают с толку. На практике для обоих используется один алгоритм, поэтому их различие никому не поможет. URL также легко выигрывает в конкурсе популярности в результатах поиска. [20]
Хотя большинство схем URI изначально были разработаны для использования с определенным протоколом и часто имеют одно и то же имя, они семантически отличаются от протоколов. Например, схема http обычно используется для взаимодействия с веб-ресурсами по протоколу HTTP, но файл схемы не имеет протокола.
URI имеет схему, которая ссылается на спецификацию назначения идентификаторов в этой схеме. По сути, синтаксис URI представляет собой объединенную и расширяемую систему именования, в которой спецификация каждой схемы может дополнительно ограничивать синтаксис и семантику идентификаторов, использующих эту схему. Общий синтаксис URI является расширенным набором синтаксиса всех схем URI. Впервые он был определен в RFC 2396, опубликованном в августе 1998 г. [9] и окончательно оформлен в RFC 3986, опубликованном в январе 2005 г. [21]
URI состоит из разрешенного набора символов ASCII , состоящих из зарезервированных символов (общие: :
, /
, ?
, #
, [
, ]
и @
; зависящие от схемы или реализации: !
, $
, &
, , '
, (
, )
, *
, +
, ,
, ;
и =
), [22] незарезервированные . символы ( прописные и строчные буквы , десятичные цифры , -
, .
, _
и ~
), [23] и символ %
. [24] Синтаксические компоненты и подкомпоненты отделяются разделителями от зарезервированных символов (только от общих зарезервированных символов для компонентов) и определяют идентифицирующие данные , представленные в виде незарезервированных символов, зарезервированных символов, которые не действуют как разделители в компоненте и подкомпоненте соответственно, [25] ] и процентное кодирование , когда соответствующий символ находится за пределами разрешенного набора или используется в качестве разделителя компонента или внутри него. Процентное кодирование октета идентифицирующих данных представляет собой последовательность из трех символов, состоящую из символа, %
за которым следуют две шестнадцатеричные цифры, представляющие числовое значение этого октета. [24]
Общий синтаксис URI состоит из пяти компонентов , организованных иерархически в порядке убывания значимости слева направо: [26]
URI = схема ":" ["//" полномочия] путь ["?" запрос] [фрагмент "#"]
Компонент не определен , если он имеет связанный разделитель и этот разделитель не отображается в URI; компоненты схемы и пути всегда определены. [27] Компонент пуст , если в нем нет символов; компонент схемы всегда непустой. [26]
Компонент полномочий состоит из подкомпонентов :
полномочия = [информация пользователя "@"] хост [":" порт]
На синтаксической диаграмме это представлено как:
URI включает в себя:
:
), состоящий из последовательности символов, начинающейся с буквы и сопровождаемой любой комбинацией букв, цифр, плюса (+
), точки (.
) или дефиса (-
). Хотя схемы нечувствительны к регистру, каноническая форма — строчные, и документы, в которых указаны схемы, должны писаться строчными буквами. Примеры популярных схемвключаютhttp
,https
,ftp
,mailto
,file
иdata
.irc
Схемы URI должны быть зарегистрированы вУправлении по присвоению номеров Интернета (IANA), хотя на практике используются незарегистрированные схемы.[б]//
), включающий:@
), который может состоять изимени пользователяи необязательногопароля,которому предшествует двоеточие (:
). Использование форматаusername:password
в подкомпоненте userinfo не рекомендуется по соображениям безопасности. Приложения не должны отображать в виде открытого текста любые данные после первого двоеточия (:
), найденные в подкомпоненте userinfo, за исключением случаев, когда данные после двоеточия представляют собой пустую строку (означающую отсутствие пароля).[]
).[29][с]:
), состоящее из десятичных цифр./
). Для URI всегда определяется путь, хотя определенный путь может быть пустым (нулевая длина). Сегмент также может быть пустым, что приводит к появлению двух последовательных косых черт (//
) в компоненте пути. Компонент пути может напоминать или точно соответствоватьпути файловой системы, но не всегда подразумевает связь с ним. Если определен компонент полномочий, то компонент пути должен быть либо пустым, либо начинаться с косой черты (/
). Если компонент полномочий не определен, то путь не может начинаться с пустого сегмента, то есть с двух косых черт (//
), поскольку следующие символы будут интерпретироваться как компонент полномочий.[31]"http://www.example.com/questions/3456/my-document"
"/questions"
— первая часть пути ( исполняемый модуль или программа) и "/3456/my-document"
вторая часть пути с именем pathinfo , который передается исполняемому модулю или программе с указанным именем "/questions"
для выбора запрошенного документа.?
), состоящий изстроки запросанеиерархических данных. Его синтаксис не очень четко определен, но по соглашению чаще всего представляет собой последовательностьпар атрибут-значение,разделенныхразделителем.#
). Фрагмент содержитидентификатор фрагмента, указывающий направление к вторичному ресурсу, например заголовок раздела в статье, идентифицируемый остатком URI. Когда основным ресурсом являетсяHTML-документ, фрагмент часто являетсяid
атрибутомопределенного элемента, и веб-браузеры прокручивают этот элемент в поле зрения.Зарезервированный символ, специфичный для схемы или реализации, +
может использоваться в схеме, пользовательской информации, хосте, пути, запросе и фрагменте, а также зарезервированные символы, специфичные для схемы или реализации, !
, $
, &
, '
, (
, )
, *
, ,
, ;
и =
могут использоваться в информации о пользователе, хосте, пути, запросе и фрагменте. Кроме того, общий зарезервированный символ :
может использоваться в пользовательской информации, пути, запросе и фрагменте, общие зарезервированные символы @
могут /
использоваться в пути, запросе и фрагменте, а общий зарезервированный символ ?
может использоваться в запросе и фрагменте. [33]
На следующем рисунке показаны примеры URI и их составные части.
userinfo порт хоста ┌──┴───┐ ┌─────┴──────┐ ┌┴┐ https://[email protected]:123/forum/questions/?tag=networking&order=newest#top └─┬─┘ └────────────┬────────────┘ └───────┬───────┘ └────────────┬────────────┘ └┬┘ фрагмент запроса пути к полномочиям схемы ldap://[2001:db8::7]/c=GB?objectClass?one └┬─┘ └─────┬─────┘ └─┬─┘ └─────┬──────┘ запрос пути к полномочиям схемы почта: [email protected] путь к схеме _ новости:comp.infosystems.www.servers.unix путь к схеме _ тел:+1-816-555-1212 └┬┘ └──────┬──────┘ путь к схеме телнет://192.0.2.16:80/ └─┬──┘ └─────┬─────┘ │ путь к полномочиям схемы урна:оазис:имена:спецификация:docbook:dtd:xml:4.1.2 └┬┘ └──────────────────────┬─────────────────────┘ схема пути
DOI ( идентификаторы цифровых объектов ) вписываются в систему дескрипторов и в систему URI, чему способствует соответствующий синтаксис .
Ссылка URI является либо URI, либо относительной ссылкой, если она не начинается с компонента схемы, за которым следует двоеточие ( :
). [34] Сегмент пути, содержащий символ двоеточия (например, foo:bar
), не может использоваться в качестве первого сегмента пути относительной ссылки, если его компонент пути не начинается с косой черты ( /
), поскольку его можно принять за компонент схемы. Такому сегменту пути должен предшествовать сегмент пути с точкой (например, ./foo:bar
). [35]
Языки разметки веб-документов часто используют ссылки URI для указания на другие ресурсы, такие как внешние документы или определенные части того же логического документа: [36]
src
элемента img
предоставляет ссылку URI, как и значение атрибута href
элемента a
или link
;SYSTEM
ключевого слова в DTD , представляет собой ссылку URI без фрагментов;href
элемента xsl:import
/инструкции является ссылкой URI; аналогично первому аргументу функции document()
.https://example.com/path/resource.txt#fragment//example.com/path/resource.txt/путь/resource.txtпуть/resource.txt../resource.txt./resource.txtресурс.txt#фрагмент
Разрешение ссылки URI на базовый URI приводит к получению целевого URI . Это означает, что базовый URI существует и является абсолютным URI (URI без компонента фрагмента). Базовый URI можно получить в порядке приоритета из: [37]
В представлении с четко определенным базовым URI
http://a/b/c/d;p?q
относительная ссылка разрешается на целевой URI следующим образом: [38]
«г:ч» -> «г:ч»"г" -> "http://a/b/c/g""./g" -> "http://a/b/c/g""г/" -> "http://a/b/c/g/""/г" -> "http://a/g""//г" -> "http://г""?y" -> "http://a/b/c/d;p?y""г?й" -> "http://a/b/c/g?y""#s" -> "http://a/b/c/d;p?q#s""g#s" -> "http://a/b/c/g#s""g?y#s" -> "http://a/b/c/g?y#s"";x" -> "http://a/b/c/;x""g;x" -> "http://a/b/c/g;x""g;x?y#s" -> "http://a/b/c/g;x?y#s""" -> "http://a/b/c/d;p?q""." -> "http://a/b/c/""./" -> "http://a/b/c/"".." -> "http://a/b/""../" -> "http://a/b/""../g" -> "http://a/b/g""../.." -> "http://a/""../../" -> "http://a/""../../g" -> "http://a/g"
Обработка URL-адресов — это метод, при котором команда добавляется к URL-адресу, обычно в конце, после знака "?" жетон . Он обычно используется в WebDAV как механизм добавления функциональности к HTTP . Например, в системе управления версиями команда «checkout» добавляется к URL-адресу и записывается как http://editing.com/resource/file.php?command=checkout
. Его преимущество заключается в том, что он удобен для анализаторов CGI , а также в данном случае выступает в качестве посредника между HTTP и базовым ресурсом. [39]
В XML пространство имен — это абстрактный домен, которому может быть присвоен набор имен элементов и атрибутов. Имя пространства имен представляет собой строку символов, которая должна соответствовать общему синтаксису URI. [40] Однако имя обычно не считается URI, [41] поскольку спецификация URI основывает решение не только на лексических компонентах, но и на их предполагаемом использовании. Имя пространства имен не обязательно подразумевает какую-либо семантику схем URI; например, имя пространства имен, начинающееся с http:, может не иметь никакого отношения к использованию HTTP .
Первоначально имя пространства имен могло соответствовать синтаксису любой непустой ссылки URI, но использование относительных ссылок URI было запрещено W3C. [42] Отдельная спецификация W3C для пространств имен в XML 1.1 позволяет ссылкам на интернационализированный идентификатор ресурса (IRI) служить основой для имен пространств имен в дополнение к ссылкам URI. [43]
.0
отбрасывать части точечно-десятичного представления или использовать необработанные целочисленные IP-адреса. [30]{{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ){{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь )