URI в HTTP протоколе

Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы и ее разделе HTTP протокол. В этой заметки мы поговорим про то, как сервер понимает, что мы обращаемся именно к нему и какой ресурс он нам должен выдать. Для этого в HTTP есть параметр URI, который может указать не только имя ресурса, к которому мы хотим обратиться, но и его местоположение.

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


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

Если вы хотите узнать всё про протокол HTTP, обратитесь к навигации по рубрике HTTP протокол. Еще одним параметром в HTTP является URI ресурса, к которому клиент делает HTTP запрос. В качестве URI может выступать URL, в этом случае у нас есть еще и информация о местонахождение ресурса или URN, который идентифицирует ресурс, но никак не определяет его местонахождение. URI в HTTP это обычная строка, которая записывается в определенном формате, еще мы можем сказать, что URI в HTTP может быть представлен в двух формах: абсолютной и относительной. Абсолютная форма URI в HTTP начинается с имени схемы. Относительная форма URI в HTTP не включает в себя имя схемы. Общий синтаксис URI в HTTP представлен в листинге ниже.

Вот такая вот ужасная конструкция, чтобы ее целиком понять, необходимо детально изучить URI и принципы кодирования.  Для ясности приведем пример эквивалентных URI в HTTP:

Давайте теперь рассмотрим, как сервер HTTP должен работать с URI.

Работа серверов HTTP с URI

Более полную информацию про URI, URL, URN вы сможете найти в скором времени на моем сайте, сейчас же я вам порекомендую обратиться к RFC 1738 и RFC 1808. Важной особенностью URI в HTTP протоколе является то, что HTTP серверы должны уметь работать с URI, состоящих из символов и не соответствующих RFC 1738.

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

URL в HTTP протоколе

Рассмотрим теперь частный случай URI в HTTP – URL, URL это не только частный случай URI в HTTP, но и самый частый случай. Выше я уже привел пример URL в HTTP, теперь давайте посмотрим общий синтаксис URL, допустимый в HTTP:

Добавим, что если вы не указали порт, то по умолчанию будет использован порт 80 для установки HTTP соединения и последующего обсуждения. Это означает, что идентифицированный ресурс размещен в сервере, ожидающем TCP соединений на специфицированном порте port, компьютера host, и запрашиваемый URI ресурса — abs_path. А вот использование IP-адресов в URL следует избегать, так говорит нам стандарт HTTP.

Правила сравнения URI в HTTP

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

  1. Если порт пуст или не указан в URI, то он эквивалентен заданному по умолчанию порту для URI.
  2. Сравнения имен хостов должно производиться без учета регистра символов.
  3. Сравнение имен схем должно производиться без учета регистра.
  4. Пустой abs_path эквивалентен ''/''.

Зарезервированные и опасные символы должны кодироваться в URI.

Текст комментария: