Универсальный идентификатор ресурсов URI. Универсальный идентификатор ресурсов (uri), его назначение и составные части

URL (Uniform Resource Locator) - единообразный локатор (определитель местонахождения) ресурса. URL - это стандартизированный способ записи адреса ресурса в Интернете.

URI (Uniform Resource Identifier) - унифицированный (единообразный) идентификатор ресурса. URI - это последовательность символов, идентифицирующая абстрактный или физический ресурс.

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

Структура адреса сайта

Вернемся к URL-адресу http://school.it2moro.ru/ . Его можно разделить на 3 части:

  1. http://
  2. school
  3. it2moro

Первая часть адреса (http://) определяет протокол взаимодействия браузера с сервером. В нашем случае это протокол HTTP, о нем речь пойдет далее.

Вторая часть адресной строки называется ПОДдоменом, а третья - доменом. Они служат для идентификации конкретного сайта с помощью службы DNS. DNS (Domain Name System, система доменных имен) - компьютерная распределенная система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства). В сети существует большое количество DNS- серверов, которые по доменному имени ресурса могут "подсказать" его реальное местоположение, определяемое IP-адресом.

Исходный код HTML-страницы

Теперь давайте разберем, что же получает браузер в ответ на сформированный HTTP-запрос. Страница может состоять из текста, картинок, гиперссылок, полей ввода, кнопок и других элементов. Информация обо всем этом была передана от веб-сервера браузеру, который и сгенерировал конечный внешний вид страницы. Передаваемые данные описываются с помощью протокола HTML.

HTML (HyperText Markup Language, язык разметки гипертекста) - стандартный язык разметки документов в Интернете. Язык HTML интерпретируется браузером и отображается в виде документа в удобной для человека форме.

Можно сказать, что браузеры выполняют две основные функции - это взаимодействие с веб-серверами посредством HTTP-запросов , а также преобразование полученного от сервера HTML-кода в визуальное представление.

Работа с URI

Каждый день мы используем универсальные идентификаторы ресурса (Uniform Resource Identifiers, URI) , когда что-то ищем в WWW. URI нужны, чтобы идентифицировать и запросить новый вид ресурса. Используя URI, можно обращаться не только к Web-страницам, но и к FTP-серверу, Web-сервису и локальным файлам.

Вместо URI часто используется термин унифицированный указатель ресурса (Uniform Resource Locator, URL) . URI-общий термин, используемый для ссылок на ресурсы. URL - это URI, связанный с такими популярными схемами URI, как http, ftp и mailto. В технической документации термин URL больше не употребляется.

Еще один термин может быть вам уже известен - унифицированное имя ресурса (Uniform Resource Name, URN) . URN - это стандартизированный URI, используемый для указания ресурса независимо от его расположения в сети.

Проанализируем части URI, ссылающегося на страницу Web-сайта компании Global Knowledge:

http://www.globalknowledge.net:80/training/generic.asp?pageid=1078&country=DACH

    Первая часть URI называется схемой (scheme) . Схема определяет пространство имен URI и может сузить синтаксис следующего за схемой выражения. Многие схемы названы по соответствующим протоколам (как http, ftp), которые они используют, но это не является обязательным. В нашем примере идентификатором схемы является http. Ограничитель схемы (// в этом примере) отделяет схему от остальной части URL.

    После ограничителя схемы следует имя сервера или IP-адрес в десятичной записи с точками, например www.globalknowledge.net.

    За именем сервера или IP-адресом находится номер порта, определяющий соединение с конкретным приложением на сервере. Если номер порта не задан, используется номер порта, устанавливаемый для этого протокола по умолчанию (например, порт 80 для HTTP).

    Путь определяет страницу (и каталог) запрошенного ресурса. Он необязательно представляет физический файл на сервере, а может создаваться динамически. В данном случае путь имеет вид /training/generic.asp.

    От пути символом? отделена последняя часть этого URI, называемая запросом (query) . В нашем примере запрос определен строкой pageid=1078&country=DACH. Строка запроса может состоять из нескольких компонентов, каждый из которых задает переменную и значение, объединенные символом &. Несколько компонентов запроса могут комбинироваться символом &. Так, в нашем примере первый компонент - pageid=1078 с переменной pageid и значением 1078, а второй компонент - country=DACH.

    Разделы внутри ресурса можно отождествить с фрагментами. Фрагменты используются для ссылок на разделы внутри HTML-страницы. В разработке Web-страниц фрагменты также называются закладками (bookmarks). Символ # отделяет идентификатор фрагмента от пути. В URL http;//www.microsoft.com/net/basics/glossary.asp#NETFramework фрагментом является строка #NETFramework.

Если символ # добавлен в строку запроса, то это уже не фрагмент. В URL может присутствовать строка запроса или фрагмент, но не то и другое одновременно.

В URI зарезервировано использование нескольких символов - они не могут входить в имена хостов или путь, поскольку представляют собой специальные символы-разделители. В URI зарезервированы следующие символы:

; / ? : @ & = + $ ,

Класс Uri из пространства имен System инкапсулирует универсальный идентификатор ресурсов. Он содержит свойства и методы для анализа, сравнения и комбинирования URI.

Можно создать объект Uri, передав конструктору строку URI:

Uri baseURI = new Uri("http://сайт");

Если уже есть базовый объект Uri, можно создать новый URI, комбинируя базовый URI с относительным URI:

Uri baseURI = new Uri("http://сайт"); Uri newURI = new Uri(baseURI, "my/csharp/web/level2/2_2.php");

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

В классе Uri есть несколько статических полей только для чтения, позволяющих получить некоторые широко распространенные схемы:

Uri.UriSchemeFile

Файловая схема используется для доступа к файлам локально или на совместно используемых сетевых ресурсах, для которых могут применяться имена, соответствующие соглашению об универсальном назначении имен (Universal Naming Convention, UNC ).

Uri.UriSChemeFtp

Протокол FTP со схемой ftp используется для получения файлов с ftp-сервера и, напротив, помещения файлов на ftp-сервер.

Uri.UriSchemeGopher

Протокол gopher был предшественником HTTP. Он предоставлял возможности иерархического просмотра текстовой информации о содержании, в чем превосходил FTP. Но скоро был заменен протоколом HTTP.

Uri.UriSchemeHttp, Uri.UriSchemeHttps

Эти две схемы хорошо известны: http и https. Схема https используется для защищенного обмена.

Uri.UriSchemeMailto

Схема mailto используется для отправки почтовых сообщений.

Uri.UriSchemeNews, Uri.UriSchemeNntp

Схемы news и nntp применяются в группах новостей, использующих протокол NNTP.

В классе Uri есть статические методы для проверки правильности схемы и имени хоста: Uri.CheckSchemeName() возвращает true, если имя схемы задано правильно, а метод UriCheckHostName() не только проверяет имя хоста, но и возвращает значение перечисления UriHostNameType, указывающее тип хоста.

В классе Uri имеется масса свойств с доступом только на чтение, позволяющих обращаться ко всем частям URI. В следующей таблице используем приведенный выше URI как пример, демонстрирующий применение свойств:

AbsoluteUri Это свойство показывает полный URI. Если указанный номер порта для протокола равен номеру порта по умолчанию, конструктор Uri автоматически его удаляет. Для нашего примера значение свойства AbsoluteUri выглядит так: http://www.globalknowledge.net/t raining/generic.asp?pageid=1078&country=DACH . Если конструктору класса Uri передается имя файла, свойство AbsoluteUri автоматически помещает перед именем файла схему file://.
Scheme Схема - первая часть URI, и в данном случае это свойство возвращает значение http.
Host Свойство Host показывает имя хоста из URI: www.globalknowledge.net
Authority Если номер порта равен номеру, используемому протоколом по умолчанию, свойство Authority показывает ту же строку, что и свойство Host. Если используется другой номер порта, то свойство Authority также показывает номер порта.
HostNameType Тип имени хоста зависит от используемого имени. В данном случае получается то же самое значение перечисления UriHostNameType, которое было рассмотрено выше.
Port С помощью свойства Port получается номер порта - 80.
AbsolutePath Абсолютный путь начинается после номера порта в URI и заканчивается перед строкой запроса. В этом случае он имеет значение /training/generic.asp.
LocalPath Локальный путь дает значение /training/generic.asp. Как можно видеть, для запроса HTTP между AbsolutePath и LocalPath нет никакого различия. Различие появляется, если URI ссылается на совместно используемый сетевой ресурс. Для URI в виде file:\\server\share\directory\file.txt свойство LocalPath возвращает только имена directory и file, а свойство AbsolutePath включает имена server и share.
Query Свойство Query показывает строку, следующую после пути: ?pageid=1078&country=DACH.
PathAndQuery Свойство PathAndQuery дает комбинацию пути и строки запроса: /training/generic.asp?pageid=1078&country=DACH.
Fragment Если после пути следует фрагмент, он возвращается в свойстве Fragment. За путем могут следовать только строка запроса или фрагмент. Фрагмент идентифицируется символом #
Segments Свойство Segments возвращает массив строк, сформированный из пути. В данном случае у нас есть три сегмента: /, training/ и generic.asp.
UserInfo Установленное в URI имя пользователя можно прочитать из свойства UserInfo. Передача имен пользователей распространена в протоколе FTP, и если указан не анонимный пользователь, например ftp://[email protected], то свойство UserInfo вернет myuser.

Кроме перечисленных, существует еще несколько свойств, возвращающих булевы значения, если URI представляет файл, путь UNC, адрес обратной связи или если для данного протокола используется номер порта по умолчанию. Это свойства IsFile, IsUnc, IsLoopback и IsDefaultPort соответственно.

1.4. Универсальный идентификатор ресурса URI

Чтобы полностью понимать, как происходит взаимодействие HTML?документов, переход между страницами и откуда вообще компьютер пользователя получает данные при работе с сетью, нужно рассмотреть, как и к чему осуществляется доступ при помощи Глобальной сети.

Многие виды ресурсов, размещенных в Интернете, независимо от того, являются ли они HTML?документами, рисунками или файлами архива, чаще всего представляют собой файлы на жестком диске компьютера (сервера), подключенного к сети. С каждым ресурсом сопоставляется значение, по которому можно однозначно определить его расположение, – универсальный идентификатор ресурса или URI (Universal Resource Identifier). URI широко используются как при самостоятельном доступе пользователя к ресурсу (когда, например, пользователь сам вводит URI в адресной строке браузера), так и при переходе между веб?страницами. URI также используются в HTML?документе для указания браузеру, где искать ресурсы (например, рисунки), используемые в самом документе.

Примечание

В литературе также часто применяется обозначение URL. Следует отметить, что URI является более общим понятием, включающим в себя URL: любой URL является универсальным идентификатором ресурса и подчиняется тем же правилам, что и URI.

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

Здесь можно увидеть, что для доступа к ресурсу, которым в данном случае является HTML?документ, используется протокол HTTP (Hyper Text Transfer Protocol). Ресурс хранится на компьютере, имеющем доменное имя somesite.com в файле ex_1.html, расположенном в папке /info/examples.

При помощи URI можно также ссылаться на части HTML?документов, например:

При использовании этого URI можно получить доступ к части HTML?документа, имеющей имя description (то, как создавать имена для фрагментов HTML?документов, будет рассмотрено в гл. 5).

URI также позволяют ссылаться на ресурсы в пределах одного компьютера. При этом указывается относительный путь ресурса. Например, чтобы из HTML?документа, расположенного в папке /info/examples, сослаться на файл /info/files/file1.jpg, достаточно задать URI /files/file1.jpg. В HTML?документах при помощи подобных ссылок указываются пути рисунков и других объектов, используемых в документах, но непосредственно не хранимых в них.

В общем случае URI считаются нечувствительными к регистру символов. Однако для полной уверенности в правильности интерпретации URI все же обращайте внимание на регистр символов в URI гиперссылок, рисунков и т. д. Это полезно для устранения таких ситуаций, когда, например, при работе сайта на компьютере под Windows все гиперссылки работают, а при помещении сайта на UNIX?сервер работать отказываются (в UNIX имена файлов чувствительны к регистру).

И реферера Google Play.

Платформа Android отличается крайне высоким уровнем фрагментации, поскольку Google вынуждает разработчиков устройств самостоятельно заниматься переносом ОС, обеспечением обратной совместимости и поддерживать множество устройств. Вследствие этого часто применяются длинные инструкции if-else, чтобы убедиться в использовании наиболее оптимального метода в соответствующем контексте.

С прямыми ссылками в Android ситуация точно такая же. С течением времени появлялось великое множество технических требований, которые необходимо соблюдать в зависимости от обстоятельств и пользовательского контекста. Решение Branch объединяет все эти реализации, это платформа ссылок, работающая во всех граничных случаях. Ссылки Branch дают возможность обойти сложности и использовать стандартное решение, поэтому вам не придется беспокоиться о совместимости. Мы настоятельно рекомендуем использовать наши решения, а не пытаться воссоздать аналогичную функциональность с нуля, поскольку мы предоставляем их бесплатно.

В этой серии публикаций описываются все разнообразные механизмы прямых ссылок, используемые нами, и поясняется их реализация.

Можно приступить к работе на сайте start.branch.io или нажать на кнопку ниже.

Схема URI в Android и фильтр намерений

В Android 1.0 был создан механизм прямых ссылок на основе схемы URI. С его помощью разработчик может зарегистрировать свое приложение с URI (универсальным кодом ресурса) в операционной системе для определенного устройства после установки приложения. В качестве URI можно использовать любую текстовую строку без специальных символов, например HTTP, pinterest, fb или myapp. Если после регистрации добавить «://» к концу URI (например, pinterest://) и щелкнуть эту ссылку, откроется приложение Pinterest. Если приложение Pinterest не установлено, появится ошибка «Страница не найдена».

Требования для использования схем URI в Android

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

Настройка схемы URI в Android

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

Можно изменить your_uri_scheme на нужную схему URI. Схема в идеале должна быть уникальной. Если она совпадет со схемой URI другого приложения, то при переходе по ссылке пользователь увидит окно выбора Android. Вы часто видите это окно, если на вашем устройстве установлено несколько веб-браузеров, поскольку они все зарегистрированы для URI HTTP.

Обработка прямых ссылок в приложении Android

После этого потребуется применить разбор строки, чтобы прочесть значения, присоединенные схемой URI.

Использование схем URI в Android на практике

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

Таким образом, чтобы обеспечить достаточное удобство пользователей в случае, если приложение не установлено, нужно заключить схему URI в код JavaScript на стороне клиента, который можно выполнить в браузере. Этот код JS будет размещен на вашем сервере, а ссылку вы будете отправлять пользователям. Ниже приведен пример.

Код попытается открыть приложение, задав источником iFrame схему URI, а затем безопасно вернется в магазин приложений Google Play, если приложение не удастся загрузить.

Заключение

Следите за дальнейшими публикациями, посвященными прямым ссылкам в Android.

Прямые ссылки в Android устроены очень сложно, граничные случаи попадаются на каждом шагу. Вам может казаться, что все великолепно работает, пока вдруг какой-нибудь пользователь не пожалуется, что у него не открываются ссылки из Facebook в Android 4.4.4. Именно поэтому стоит использовать программы, подобные Branch: вы сможете просто забыть все эти сложности как страшный сон и привыкнете к тому, что ссылки просто всегда работают.

Related Posts

Прямые ссылки, универсальные ссылки, схемы URI/URL и ссылки приложений - за последние годы все эти механизмы в значительной степени изменили принцип связи с содержимым в мобильных приложениях. У многих разработчиков приложений нет четкого…

Каждый день мы в Branch работаем над тем, чтобы довести процесс использования ссылок на мобильных платформах до совершенства. Наши ссылки предоставляют доступ к таким вещам как: умные редиректы, показ пользователю…