Гипертекстный протокол HTTP - часть 12
Версия HTTP приложения является верхней, совместимость с которой гарантируется. Приложения прокси-серверов и сетевых портов должны проявлять осторожность при переадресации сообщений с протокольной версией, отличной от поддерживаемой ими. Так как версия протокола указывает на возможности отправителя, прокси никогда не должны пересылать сообщения с версией больше, чем их собственная; если получено сообщение более высокой версии, прокси/порт должен либо понизить версию запроса, либо послать отклик об ошибке или переключиться в режим туннеля. Запросы с версией ниже, чем у прокси/порта могут быть повышены при переадресации, при этом major часть версии сервера и запроса должны совпадать.
Замечание: Преобразование между версиями может включать модификацию полей заголовка.
2.2. Универсальные идентификаторы ресурсов (URI)
URI известен под многими именами: WWW адрес, универсальный идентификатор документа (Universal Document Identifiers), универсальный идентификатор ресурса (Universal Resource Identifiers), и, наконец, универсальный локатор ресурса URL (Uniform Resource Locators; тождество URI и URL сомнительно, так как URL является частным случаем URI (примечание переводчика)) и универсальное имя ресурса (URN). Что касается HTTP, универсальный идентификатор ресурса представляет собой форматированную строку символов, которая идентифицирует имя, положение или какие-то еще характеристики ресурса.
URI в HTTP может быть представлен в абсолютной или относительной форме по отношению к некоторому известному базовому URI, в зависимости от контекста его использования. Эти две формы отличаются тем, что абсолютный URI всегда начинается с имени схемы, за которым следует двоеточие (например HTTP: или FTP:).
URI |
= ( absoluteURI | relativeURI ) [ "#" фрагмент ] |
AbsoluteURI |
= схема ":" *( uchar | reserved ) |
RelativeURI |
= net_path | abs_path | rel_path |
net_path |
= "//" net_loc [ abs_path ] |
abs_path |
= "/" rel_path |
rel_path |
= [ проход ] [ ";" params ] [ "?" query ] |
path |
= fsegment *( "/" сегмент ) |
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 |
= |
