## URI/URL/URN

![NewFullURISchem](/pictures/ComputerScience/NewFullURISchem.jpg?raw=true)

**URI (Uniform Resource Identifier)** - унифицированный идентификатор ресурса или полный адрес, по которому происходит обращение. В кратце, он позволяет идентифицировать какой-либо ресурс: физический (https://assets.habr.com/habr-web/img/favicons/favicon-16.png - файл на сервере) или абстрактный (https://www.youtube.com/watch?v=e_atyw0IDqg - его не существует).

**URN (Uniform Resource Name)** - единообразное название ресурса. Может по одному только названию дать вам ресурс (абстрактный или физический). Аналогия URN из жизни: паспорт РФ: Иванов Иван Иванович, паспорт серия 1234 номер 123456.

**URL (Uniform Resource Locator)** - унифицированный локатор ресурса или комбинация протокола и доменного имени. Пример: https://www.youtube.com. Аналогия URL из жизни: город N/улица M/квартира L

![URLSchemeIniOS](/pictures/ComputerScience/URLSchemeIniOS.png?raw=true)

### Составляющие URI

**Endpoint** - часть адреса, идущая после доменного имени (например, после .com/). Пример: /watch?v=e_atyw0IDqg

**Query-параметры** - часть URI, следующая после ?. Пример: ?v=e_atyw0IDqg

![QueryStructure](/pictures/ComputerScience/QueryStructure.png?raw=true)

Существуют варианты использования параметров URL:

![Query](/pictures/ComputerScience/Query.png?raw=true)

### URL [encoding](https://github.com/eldaroid/iTWiki/blob/master/5%20Swift/5.2%20Glossary.md#кодирование%20(запись))

Стандарт URL использует набор символов [US-ASCII](/3%20Memory%20and%20Concurrency/3.1%20Memory/3.1.1%20AboutMemory/3.1.1.2%20ASCIIvsUNICODE.md). Является недостатком, поскольку разрешается использовать лишь латинские буквы, цифры и несколько знаков пунктуации. 

Остальные символы необходимо перекодировать. Например, перекодироваться должны буквы кириллицы, буквы с диакритическими знаками (á, ë, ĉ), иероглифы и тп. 

Перекодирующая кодировка описана в стандарте [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) и называется URL-encoding/URLencoded или percent‐encoding.

**URL-коды** зарезервированных символов:

Зарезервированные символы в URL используются для определенных целей в синтаксисе URL, требуют [кодирования (encoding)](/5%20Swift/5.2%20Glossary.md#кодирование-записьencodingencode), чтобы избежать недоразумений или ошибок при передаче данных через интернет.

| Символ | Код UTF-8   | Описание                              |
|--------|-------|---------------------------------------|
| пробел | %20   | Разделение текста                     |
| !      | %21   | Разделяет части URL                   |
| *      | %2A   | Замена символов                       |
| '      | %27   | Строковые параметры                   |
| (      | %28   | Группировка                           |
| )      | %29   | Группировка                           |
| ;      | %3B   | Разделение параметров                 |
| :      | %3A   | Разделение схемы и пути               |
| @      | %40   | Разделение пользователя и хоста       |
| &      | %26   | Разделение параметров запроса         |
| =      | %3D   | Связь ключ-значение в параметрах      |
| +      | %2B   | Замена пробелов в запросах            |
| $      | %24   | Специальные параметры                 |
| ,      | %2C   | Разделение значений                   |
| /      | %2F   | Разделение путей                      |
| ?      | %3F   | Начало строки запроса                 |
| #      | %23   | Указание на фрагмент страницы         |
| [      | %5B   | IPv6 адреса                           |
| ]      | %5D   | IPv6 адреса                           |



**Русский алфавит кодов**:

| Символ | Код UTF-8 | Маленький символ | Код UTF-8 |
|--------|-----------|------------------|-----------|
| А      | %D0%90    | а                | %D0%B0    |
| Б      | %D0%91    | б                | %D0%B1    |
| В      | %D0%92    | в                | %D0%B2    |
| Г      | %D0%93    | г                | %D0%B3    |
| Д      | %D0%94    | д                | %D0%B4    |
| Е      | %D0%95    | е                | %D0%B5    |
| Ё      | %D0%81    | ё                | %D1%91    |
| Ж      | %D0%96    | ж                | %D0%B6    |
| З      | %D0%97    | з                | %D0%B7    |
| И      | %D0%98    | и                | %D0%B8    |
| Й      | %D0%99    | й                | %D0%B9    |
| К      | %D0%9A    | к                | %D0%BA    |
| Л      | %D0%9B    | л                | %D0%BB    |
| М      | %D0%9C    | м                | %D0%BC    |
| Н      | %D0%9D    | н                | %D0%BD    |
| О      | %D0%9E    | о                | %D0%BE    |
| П      | %D0%9F    | п                | %D0%BF    |
| Р      | %D0%A0    | р                | %D1%80    |
| С      | %D0%A1    | с                | %D1%81    |
| Т      | %D0%A2    | т                | %D1%82    |
| У      | %D0%A3    | у                | %D1%83    |
| Ф      | %D0%A4    | ф                | %D1%84    |
| Х      | %D0%A5    | х                | %D1%85    |
| Ц      | %D0%A6    | ц                | %D1%86    |
| Ч      | %D0%A7    | ч                | %D1%87    |
| Ш      | %D0%A8    | ш                | %D1%88    |
| Щ      | %D0%A9    | щ                | %D1%89    |
| Ъ      | %D0%AA    | ъ                | %D1%8A    |
| Ы      | %D0%AB    | ы                | %D1%8B    |
| Ь      | %D0%AC    | ь                | %D1%8C    |
| Э      | %D0%AD    | э                | %D1%8D    |
| Ю      | %D0%AE    | ю                | %D1%8E    |
| Я      | %D0%AF    | я                | %D1%8F    |

---

[2.3.1.2 Rest API Theme](./2.3.1.2%20RestAPI.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [2.3.1.4 HTTP Methods Theme](./2.3.1.4%20HTTP_Methods.md)
