sonyps4.ru

Универсальный идентификатор ресурсов URI. Техническое руководство по прямым ссылкам в Android: Схемы 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 предоставляет простой и расширяемый способ идентификации ресурсов. Расширяемость URI означает, что уже существуют несколько схем идентификации внутри URI, и ещё больше будет создано в будущем.
Подробнее см. «Структура URI» ниже .

Самые известные примеры URI - это URN. URL - это URI, который, помимо идентификации ресурса, предоставляет ещё и информацию о местонахождении этого ресурса. А URN - это URI, который идентифицирует ресурс в определённом пространстве имён (и, соответственно, в определённом контексте). Например, URN urn:ISBN:0-395-36341-1 - это URI, который указывает на ресурс (книгу) 0-395-36341-1 в пространстве имён ISBN , но, в отличие от URL, URN не указывает на местонахождение этого ресурса. Впрочем, в последнее время появилась тенденция говорить просто URI о любой строке-идентификаторе, без дальнейших уточнений. Так что, возможно, термины URL и URN скоро уйдут в прошлое.

История

Новая версия URI была определена в 1998 году в RFC 2396 , тогда же слово Universal в названии было заменено на Uniform . В декабре 1999 года RFC 2732 ввёл в спецификацию URI небольшие изменения, обеспечив совместимость с августе 2002 года RFC 3305 анонсировал устаревание термина URL и приоритет URI. Текущая структура и синтаксис URI регулируется стандартом RFC 3986 , вышедшим в январе 2005 года . Многие новейшие технологии семантической паутины (например, RDF) базируются на стандарте URI. Сейчас ведущая роль в развитии URI принадлежит Консорциуму Всемирной паутины .

Недостатки

URL стал фундаментальным нововведением в Интернете , поэтому принципы URI документально закреплялись так, чтобы обеспечить полную совместимость с URL. Отсюда появился и большой недостаток URI, пришедший как наследство от URL. В URI, как и в URL, можно использовать только ограниченный набор латинских символов и знаков препинания (даже меньший, нежели в кириллицы, или иероглифы , или, скажем, специфические символы французского языка , то нам придётся кодировать URI таким же образом, каким в Википедии кодируются URL с символами Юникода . Например, строка вида:

http://ru.wikipedia.org/wiki/Микрокредит

кодируется в URL как:

http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D1%80%D0%B5%D0%B4%D0%B8%D1%82

Поскольку такому преобразованию подвергаются буквы всех алфавитов, кроме используемой в английском языке латиницы , то URI со словами на других языках (даже европейских) утрачивают способность восприниматься людьми. А это входит в грубое противоречие с принципом интернационализма , провозглашаемого всеми ведущими организациями Интернета , включая W3C и IRI (англ. International Resource Identifier ) - международных идентификаторов ресурсов, в которых можно было бы без проблем использовать символы Юникода, и которые не ущемляли бы права других языков . Хотя заранее сложно сказать, смогут ли когда-либо идентификаторы . Этот формат стремится создавать идентификаторы, которые были бы совершенно независимы от контекста, то есть не зависели бы ни от протокола , ни от домена , ни от пути, ни от приложения , ни от платформы - были бы совершенно независимыми.

Также и сам создатель URI, Тим Бернерс-Ли, говорил, что система доменных имён, лежащая в основе URL, - плохое решение, навязывающее ресурсам иерархическую архитектуру, мало подходящую для гипертекстового веба .

Структура URI

Разбор структуры URI

Для так называемого «па́рсинга» URI (англ. parsing ), то есть для разложения URI на составные части и их последующей идентификации удобнее всего использовать систему регулярных выражений , доступную ныне почти во всех современных языках программирования. Для разбора URI рекомендуется использовать следующий шаблон:

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9

Этот шаблон включает в себя 9 обозначенных выше цифрами групп (подробнее о шаблонах и группах см. Регулярные выражения), которые наиболее полно и точно разбирают типичную структуру URI, где:

  • группа 2 - схема,
  • группа 4 - источник,
  • группа 5 - путь,
  • группа 7 - запрос,
  • группа 9 - фрагмент.

Таким образом, если при помощи данного шаблона разобрать, например, такой типичный идентификатор URI:

Http://www.ics.uci.edu/pub/ietf/uri/#Related

то 9 вышеуказанных групп шаблона дадут следующие результаты соответственно:

  1. http:
  2. //www.ics.uci.edu
  3. www.ics.uci.edu
  4. /pub/ietf/uri/
  5. нет результата
  6. нет результата
  7. #Related
  8. Related

Отличие URI от URL

URI не всегда указывает то, как получить ресурс, в отличие от URL, а только идентифицирует его. Это даёт возможность описывать с помощью RDF (Resource Description Framework) ресурсы, которые не могут быть получены через Интернет (например, личность, автомобиль, город и проч.).

Примеры URI

Абсолютные URI

http://ru.wikipedia.org/wiki/URI ftp://ftp.is.co.za/rfc/rfc1808.txt file://C:\UserName.HostName\Projects\Wikipedia_Articles\URI.xml ldap:///c=GB?objectClass?one mailto:[email protected] sip:[email protected] news:comp.infosystems.www.servers.unix data:text/plain;charset=iso-8859-7,%be%fg%be tel:+1-816-555-1212 telnet://192.0.2.16:80/ urn:oasis:names:specification:docbook:dtd:xml:4.1.2

Ссылки URI

/relative/URI/with/absolute/path/to/resource.txt relative/path/to/resource.txt ../../../resource.txt resource.txt /resource.txt#frag01 #frag01 [пустая строка]

См. также

Ссылки

  • RFC 3986 / STD 66 (от 2005 года)
  • RFC 2396 (от 1998 года) - устаревшая версия синтаксиса

Примечания


Wikimedia Foundation . 2010 .

Смотреть что такое "Uri" в других словарях:

    Uri - may refer to:Geography: * Canton of Uri is a canton (region) of Switzerland * Uri (India), a region and town in Kashmir * Uri (SS), a city in Sardinia, Italy * Úri, a village in Pest county, Hungary * Sumerian URI, the land of AgadeURI, a three… … Wikipedia

    urî - URÎ, urăsc, vb. IV. 1. tranz. A avea un puternic sentiment de antipatie, de duşmănie împotriva cuiva sau a ceva; a nu putea suferi pe cineva sau ceva. 2. refl. impers. (Construit cu dativul) A se plictisi, a se sătura de ceva sau de cineva. ♢… … Dicționar Român

    uri - urì interj., urỹ NdŽ, Jn, Aln, ùri kartojant 1. nusakomas puolančio šuns(ar šunų) urzgimas: Tik urỹ urỹ ir apipuolo mane šunes K.Būg(Ds). Urì urì šunes kad pradeda loti Šmn. ║ Ds sakoma pjudant šuniu. 2. Vžns nusakomas triukšmingas… … Dictionary of the Lithuanian Language

И реферера 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 работаем над тем, чтобы довести процесс использования ссылок на мобильных платформах до совершенства. Наши ссылки предоставляют доступ к таким вещам как: умные редиректы, показ пользователю…

Работа с 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 соответственно.



Загрузка...