Реферат: Протокол HTTP 1.1
URI известны под многими именами: WWW адреса, Универсальные Идентификаторы Документов, Универсальные Идентификаторы Ресурсов (URI), и, в заключение, как комбинация Единообразных Идентификаторов Ресурсов (Uniform Resource Locators, URL) и Единообразных Имен Ресурсов (Uniform Resource Names, URN). HTTP определяет URL просто как строку определенного формата, которая идентифицирует ресурс посредством имени, расположения, или любой другой характеристики.
3.2.1 Общий синтаксис.
URI в HTTP могут представляться в абсолютной форме (absolute URI) или относительно некоторого известного основного URI (relative URI), в зависимости от контекста их использования. Эти две формы различаются тем, что абсолютные URI всегда начинаются с имени схемы с двоеточием.
URI = ( absoluteURI | relativeURI ) [ "#" fragment ]
absoluteURI = scheme ":" *( uchar | reserved )
relativeURI = net_path | abs_path | rel_path
net_path = "//" net_loc [ abs_path ] abs_path = "/" rel_path rel_path = [ path ] [ ";" params ] [ "?" query ]
path = fsegment *( "/" segment ) fsegment = 1*pchar segment = *pchar
params = param *( ";" param ) param = *( pchar | "/" )
scheme = 1*( ALPHA | DIGIT | "+" | "-" | "." ) net_loc = *( pchar | ";" | "?" )
query = *( uchar | reserved ) fragment = *( uchar | reserved )
pchar = uchar | ":" | "@" | "&" | "=" | "+" uchar = unreserved | escape unreserved = ALPHA | DIGIT | safe | extra | national
escape = "%" HEX HEX reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" extra = "!" | "*" | "'" | "(" | ")" | "," safe = "$" | "-" | "_" | "." unsafe = CTL | SP | <"> | "#" | "%" | "<" | ">" national = <любой OCTET за исключением ALPHA, DIGIT, reserved, extra, safe, и unsafe октетов>
Полная информация о синтаксисе и семантике URL содержится в RFC 1738 и RFC 1808. Нормальная запись Бекуса-Наура включает национальные символы, недозволенные в правильных URL, определеных RFC 1738, так как HTTP серверы позволяют использовать для представления части rel_path адресов набор не зарезервированных символов, и, следовательно, HTTP прокси-сервера могут получать запросы URI, не удовлетворяющие RFC 1738.
Протокол HTTP не накладывает никаких ограничений на длины URI. Серверы должны обрабатывать URI любого ресурса, любой длинны, который они обслуживают, и им надлежит обрабатывать URI неограниченной длины, если они обслуживают сервера, основанные на методе GET, которые могут создавать такой URI. Серверу следует возвращать код состояния 414 (URI запроса слишком длинный, Request-URI Too Long), если URI длиннее, чем сервер в состоянии обработать.
Серверы должны обращать внимание на URI, которые имеют длину более 255 байтов, потому что некоторые старые клиенты или прокси-сервера могут неправильно поддерживать эти длины.
3.2.2 HTTP URL.
"Http" схема используется для доступа к сетевым ресурсам при помощи протокола HTTP. Этот раздел определяет схемо-определенный синтаксис и семантику для HTTP URL.
http_URL = "http:" "//" host [ ":" port ] [ abs_path ]
host = <допустимое доменное имя машины или IP адрес (в точечно десятичной форме), как определено в разделе 2.1 RFC 1123>
port = *DIGIT
Если порт пуст или не задан - используется порт 80. Это означает, что идентифицированный ресурс размещен в сервере, ожидающем TCP соединений на специфицированном порте port, компьютера host, и запрашиваемый URI ресурса - abs_path. Использования IP адресов в URL следует избегать, насколько это возможно (RFC 1900). Если abs_path не представлен в URL, он должен рассматриваться как "/" при вычислении запрашиваемого URI (Request-URI) ресурса.
3.2.3 Сравнение URI .
При сравнении двух URI, чтобы решить соответствуют ли они друг другу или нет, клиенту следует использовать чувствительное к регистру пооктетное (octet-by-octet) сравнение этих URI, со следующими исключениями:
- Порт, который пуст или не указан, эквивалентен заданному по умолчанию порту для этого URI;
- Сравнение имен хостов должно производиться без учета регистра;
- Сравнение имен схем должно производиться без учета регистра;
- Пустой abs_path эквивалентен "/".
- Символы, отличные от тех, что находятся в "зарезервированных" ("reserved") и "опасных" ("unsafe") наборах эквивалентны их представлению как ""%" HEX HEX ".