Унифицированный идентификатор ресурса ( URI ), ранее известный как универсальный идентификатор ресурса , представляет собой уникальную последовательность символов, которая идентифицирует абстрактный или физический ресурс, [1] такой как ресурсы на веб-странице, почтовый адрес, номер телефона, [2] книги, реальные ресурсы. объекты мира, такие как люди и места, концепции. [3] URI используются для идентификации всего, что описано с использованием структуры описания ресурсов (RDF), например, концепций, которые являются частью онтологии , определенной с использованием языка веб-онтологии (OWL), и людей, которые описываются с использованием «друг друга». каждый словарь будет иметь индивидуальный URI.
URI, которые предоставляют средства поиска и получения информационных ресурсов в сети (либо в Интернете, либо в другой частной сети, такой как компьютерная файловая система или интранет ), представляют собой унифицированные указатели ресурсов ( URL-адреса ). Таким образом, URL-адреса являются подмножеством URI, т.е. каждый URL-адрес является URI (и не обязательно наоборот). [2] Другие URI предоставляют только уникальное имя без средств поиска или получения ресурса или информации о нем; это унифицированные имена ресурсов (URN). Веб-технологии, использующие URI, не ограничиваются веб-браузерами.
URI и URL-адреса имеют общую историю. В 1990 году предложения Тима Бернерса-Ли по гипертексту неявно представили идею URL-адреса как короткой строки, представляющей ресурс, являющийся целью гиперссылки . [4] В то время люди называли его «гипертекстовым именем» [5] или «именем документа».
В течение следующих трех с половиной лет, по мере развития основных технологий Всемирной паутины, таких как HTML, HTTP и веб-браузеры, возникла необходимость отличать строку, предоставляющую адрес ресурса, от строки, которая просто называет ресурс. Хотя термин «Единый указатель ресурса» еще не определен формально, он стал обозначать первый, а более спорное «Единое имя ресурса» — второе. В июле 1992 года в отчете Бернерса-Ли о IETF «UDI (универсальные идентификаторы документов) BOF » упоминаются URL-адреса (как унифицированные указатели ресурсов), URN (первоначально как уникальные номера ресурсов) и необходимость создания новой рабочей группы. [6] В ноябре 1992 года «Рабочая группа URI» IETF встретилась впервые. [7]
В ходе дебатов по поводу определения URL-адресов и URN стало очевидно, что концепции, воплощенные в этих двух терминах, являются всего лишь аспектами фундаментального, всеобъемлющего понятия идентификации ресурса . В июне 1994 года IETF опубликовала первый запрос Бернерса-Ли на комментарии , в котором признавалось существование URL-адресов и URN. Самое главное, он определил формальный синтаксис для универсальных идентификаторов ресурсов (т.е. строк, подобных URL-адресам, точный синтаксис и семантика которых зависели от их схем). Кроме того, в RFC 1630 была предпринята попытка обобщить синтаксис схем URL-адресов, использовавшихся в то время. Он признал, но не стандартизировал , существование относительных URL-адресов и идентификаторов фрагментов. [8]
В декабре 1994 года RFC 1738 официально определил относительные и абсолютные URL-адреса, уточнил общий синтаксис URL-адресов, определил, как преобразовать относительные URL-адреса в абсолютную форму, и лучше перечислил используемые тогда схемы URL-адресов. [9] Согласованному определению и синтаксису URN пришлось подождать до публикации IETF RFC 2141 [10] в мае 1997 года.
Публикация IETF RFC 2396 [11] в августе 1998 года привела к тому, что синтаксис URI стал отдельной спецификацией [11] , а большинство частей RFC 1630 и 1738, касающихся URI и URL-адресов в целом, были пересмотрены и расширены IETF . В новом RFC значение U в URI изменено с «Universal» на «Uniform».
В декабре 1999 года в RFC 2732 [12] было внесено незначительное обновление RFC 2396, позволяющее использовать URI для адресов IPv6 . Ряд недостатков, обнаруженных в двух спецификациях, привел к усилиям сообщества, координируемым соавтором RFC 2396 Роем Филдингом , которые завершились публикацией IETF RFC 3986 [13] в январе 2005 года. сделать устаревшими детали существующих схем URL-адресов; RFC 1738 продолжает регулировать такие схемы, если иное не заменено. Например, IETF RFC 2616 [14] уточняет эту схему. Одновременно IETF опубликовал содержание RFC 3986 как полный стандарт STD 66, что отражает установление общего синтаксиса URI в качестве официального протокола Интернета.http
В 2001 году Группа технической архитектуры W3C (TAG) опубликовала руководство по лучшим практикам и каноническим URI для публикации нескольких версий данного ресурса. [15] Например, контент может отличаться в зависимости от языка или размера в зависимости от емкости или настроек устройства, используемого для доступа к этому контенту.
В августе 2002 года IETF RFC 3305 [16] указал, что термин «URL», несмотря на широкое публичное использование, практически устарел и служит лишь напоминанием о том, что некоторые URI действуют как адреса, имея схемы, предполагающие доступность сети, независимо от того, любого такого фактического использования. Как ясно показывают стандарты, основанные на URI, такие как Resource Description Framework , идентификация ресурсов не обязательно предполагает получение представлений ресурсов через Интернет, а также не обязательно подразумевает сетевые ресурсы.
Семантическая сеть использует схему HTTP URI для идентификации как документов, так и концепций для практического использования, и это различие привело к путанице в том, как их различать. В 2005 году TAG опубликовал электронное письмо с решением проблемы, которое стало известно как резолюция httpRange-14 . [17] Впоследствии W3C опубликовал заметку группы по интересам под названием Cool URI для семантической сети , в которой более подробно объяснялось использование согласования контента и кода ответа HTTP 303 для перенаправления. [18]
Единое имя ресурса (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, который идентифицирует ресурс через представление его основного механизма доступа (например, его сетевое «местоположение»), а не через какие-то другие атрибуты, которые он может иметь. [19]
Таким образом, URL-адрес — это просто URI, который указывает на ресурс в сети. [a] [16] Однако в нетехническом контексте и в программном обеспечении для Всемирной паутины термин «URL» по-прежнему широко используется. Кроме того, термин «веб-адрес» (который не имеет формального определения) часто встречается в нетехнических публикациях как синоним URI, использующего схемы http или https . Такие предположения могут привести к путанице, например, в случае пространств имен XML, которые визуально похожи на разрешимые URI.
Спецификации, разработанные WHATWG, отдают предпочтение URL-адресу , а не URI , поэтому новые API HTML5 используют URL-адрес , а не URI . [20]
Стандартизируйте термин URL. URI и IRI [интернационализированный идентификатор ресурса] просто сбивают с толку. На практике для обоих используется один алгоритм, поэтому их различие никому не поможет. URL-адрес также легко выигрывает в конкурсе популярности в результатах поиска. [21]
Хотя большинство схем URI изначально были разработаны для использования с определенным протоколом и часто имеют одно и то же имя, они семантически отличаются от протоколов. Например, схема http обычно используется для взаимодействия с веб-ресурсами по протоколу HTTP, но файл схемы не имеет протокола.
URI имеет схему, которая ссылается на спецификацию назначения идентификаторов в этой схеме. По сути, синтаксис URI представляет собой объединенную и расширяемую систему именования, в которой спецификация каждой схемы может дополнительно ограничивать синтаксис и семантику идентификаторов, использующих эту схему. Общий синтаксис URI является расширенным набором синтаксиса всех схем URI. Впервые он был определен в RFC 2396, опубликованном в августе 1998 г. [11] и окончательно оформлен в RFC 3986, опубликованном в январе 2005 г. [22]
URI состоит из разрешенного набора символов ASCII , состоящего из зарезервированных символов (ген-разделители: :
, /
, ?
, #
, [
, ]
и @
; подразделители: !
, $
, &
, '
, (
, )
, *
, +
, , ,
, ;
и =
), [23] незарезервированные символы. ( прописные и строчные буквы , десятичные цифры , -
, .
, _
и ~
), [23] и символ %
. [24] Синтаксические компоненты и подкомпоненты отделяются разделителями от зарезервированных символов (только от общих зарезервированных символов для компонентов) и определяют идентифицирующие данные , представленные в виде незарезервированных символов, зарезервированных символов, которые не действуют как разделители в компоненте и подкомпоненте соответственно, [13] ] : §2 и процентное кодирование, когда соответствующий символ находится за пределами разрешенного набора или используется в качестве разделителя компонента или внутри него. Процентное кодирование октета идентифицирующих данных представляет собой последовательность из трех символов, состоящую из символа, %
за которым следуют две шестнадцатеричные цифры, представляющие числовое значение этого октета. [13] : §2.1
Общий синтаксис URI состоит из пяти компонентов , организованных иерархически в порядке убывания значимости слева направо: [13] : §3.
URI = схема ":" ["//" полномочия] путь ["?" запрос] [фрагмент "#"]
Компонент не определен , если он имеет связанный разделитель и этот разделитель не отображается в URI; компоненты схемы и пути всегда определены. [13] : §5.2.1 Компонент пуст , если в нем нет символов; компонент схемы всегда непустой. [13] : §3
Компонент полномочий состоит из подкомпонентов :
полномочия = [информация пользователя "@"] хост [":" порт]
На синтаксической диаграмме это представлено как:
URI включает в себя:
:
), состоящий из последовательности символов, начинающейся с буквы и сопровождаемой любой комбинацией букв, цифр, плюса (+
), точки (.
) или дефиса (-
). Хотя схемы нечувствительны к регистру, каноническая форма — строчные, и документы, в которых указаны схемы, должны писаться строчными буквами. Примеры популярных схем включаютhttp
,https
,ftp
,mailto
,file
,data
иirc
. Схемы URI должны быть зарегистрированы вУправлении по присвоению номеров Интернета (IANA), хотя на практике используются незарегистрированные схемы.[б]//
), включающий:@
), который может состоять изимени пользователяи необязательногопароля, которым предшествует двоеточие (:
). Использование форматаusername:password
в подкомпоненте userinfo не рекомендуется по соображениям безопасности. Приложения не должны отображать в виде открытого текста любые данные после первого двоеточия (:
), найденные в подкомпоненте userinfo, за исключением случаев, когда данные после двоеточия представляют собой пустую строку (означающую отсутствие пароля).[]
).[13] : §3.2.2 [c]:
), состоящее из десятичных цифр./
). Для URI всегда определяется путь, хотя определенный путь может быть пустым (нулевая длина). Сегмент также может быть пустым, что приводит к появлению двух последовательных косых черт (//
) в компоненте пути. Компонент пути может напоминать или точно соответствоватьпути файловой системы, но не всегда подразумевает связь с ним. Если определен компонент полномочий, то компонент пути должен быть либо пустым, либо начинаться с косой черты (/
). Если компонент полномочий не определен, то путь не может начинаться с пустого сегмента, то есть с двух косых черт (//
), поскольку следующие символы будут интерпретироваться как компонент полномочий.[11] : §3.3 "http://www.example.com/questions/3456/my-document"
"/questions"
— первая часть пути ( исполняемый модуль или программа) и "/3456/my-document"
вторая часть пути с именем pathinfo , который передается исполняемому модулю или программе с указанным именем "/questions"
для выбора запрошенного документа.?
), состоящий изстроки запросанеиерархических данных. Его синтаксис не очень четко определен, но по соглашению чаще всего представляет собой последовательностьпар атрибут-значение,разделенныхразделителем.#
). Фрагмент содержитидентификатор фрагмента, указывающий направление к вторичному ресурсу, например заголовок раздела в статье, идентифицируемый остатком URI. Когда основным ресурсом являетсяHTML-документ, фрагмент часто являетсяid
атрибутомопределенного элемента, и веб-браузеры прокручивают этот элемент в поле зрения.Зарезервированный символ, специфичный для схемы или реализации, +
может использоваться в схеме, пользовательской информации, хосте, пути, запросе и фрагменте, а также зарезервированные символы, специфичные для схемы или реализации !
, $
, &
, '
, (
, , )
, *
, ,
, ;
, и =
могут использоваться в информации о пользователе, хосте, пути, запросе и фрагменте. Кроме того, общий зарезервированный символ :
может использоваться в пользовательской информации, пути, запросе и фрагменте, общие зарезервированные символы @
могут /
использоваться в пути, запросе и фрагменте, а общий зарезервированный символ ?
может использоваться в запросе и фрагменте. [13] : §А
На следующем рисунке показаны примеры URI и их составные части.
userinfo хост- порт ┌──┴───┐ ┌─────┴──────┐ ┌┴─┐ https://[email protected]:1234/forum/questions/?tag=networking&order=newest#top └─┬─┘ └────────────┬─────────────┘ └───────┬──────── ┘ └────────────┬───────────┘ └┬┘ схема , полномочия , путь , фрагмент запроса, информация о пользователе, порт хоста ┌──┴───┐ ┌── ────┴──────┐ ┌┴─┐ https://[email protected]:1234/forum/questions/?tag=networking&order=newest#:~:text=whatever └─┬─┘ └────────────┬─────────────┘ └───────┬──────── ┘ └────────────┬───────────┘ └───────┬───────┘ фрагмент запроса пути к полномочиям схемы 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, либо относительной ссылкой , если она не начинается с компонента схемы, за которым следует двоеточие ( :
). [13] : §4.1 Сегмент пути, содержащий символ двоеточия (например, foo:bar
), не может использоваться в качестве первого сегмента пути относительной ссылки, если его компонент пути не начинается с косой черты ( /
), поскольку это было бы ошибочно принято за компонент схемы. Такому сегменту пути должен предшествовать сегмент пути с точкой (например, ./foo:bar
). [13] : §4.2
Языки разметки веб-документов часто используют ссылки URI для указания на другие ресурсы, такие как внешние документы или определенные части того же логического документа: [13] : §4.4
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 можно получить в порядке приоритета из: [13] : §5.1.
В представлении с четко определенным базовым URI
http://a/b/c/d;p?q
относительная ссылка разрешается на целевой URI следующим образом: [13] : §5.4
«г:ч» -> «г:ч»"г" -> "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 . Например, в системе управления версиями для добавления команды «извлечение» к URL-адресу она записывается как http://editing.com/resource/file.php?command=checkout
. Его преимущество заключается в том, что он удобен для анализаторов CGI , а также в данном случае выступает в качестве посредника между HTTP и базовым ресурсом. [28]
В XML пространство имен — это абстрактный домен, которому может быть присвоен набор имен элементов и атрибутов. Имя пространства имен представляет собой строку символов, которая должна соответствовать общему синтаксису URI. [29] Однако имя обычно не считается URI, [30] потому что спецификация URI основывает решение не только на лексических компонентах, но и на их предполагаемом использовании. Имя пространства имен не обязательно подразумевает какую-либо семантику схем URI; например, имя пространства имен, начинающееся с http:, может не иметь никакого отношения к использованию HTTP .
Первоначально имя пространства имен могло соответствовать синтаксису любой непустой ссылки URI, но использование относительных ссылок URI было запрещено W3C. [31] Отдельная спецификация W3C для пространств имен в XML 1.1 позволяет ссылкам на интернационализированный идентификатор ресурса (IRI) служить основой для имен пространств имен в дополнение к ссылкам URI. [32]
.0
отбрасывать части десятично-точечной записи или использовать необработанные целочисленные IP-адреса. [26]{{citation}}
: CS1 maint: multiple names: authors list (link)