Протокол HTTP 1.1Рефераты >> Коммуникации и связь >> Протокол HTTP 1.1
Протокол HTTP - это протокол запросов/ответов. Клиент посылает по соединению запрос серверу, содержащий: метод запроса, URI, версию протокола, MIME-подобное сообщение, включающее модификаторы запроса, клиентскую информацию и, возможно, тело запроса. Сервер отвечает строкой состояния, включающей версию протокола сообщения, кодом успешного выполнения или ошибки, MIME-подобным сообщением, содержащим информацию о сервере, метаинформацию объекта и, возможно, тело объекта.
Большинство HTTP соединений, инициализируется агентом пользователя и состоит из запроса, который нужно применить к ресурсу на некотором первоначальном сервере. В самом простом случае, он может быть выполнен посредством одиночного соединения между агентом пользователя и первоначальным сервером.
Более сложная ситуация возникает, когда в цепочке запросов/ответов присутствует один или несколько посредников. Существуют три основных разновидности посредников: прокси-сервера, шлюзы, и туннели. Прокси-сервер является агентом-посредником, который получает запросы на некоторый URI в абсолютной форме, изменяет все сообщение или его часть и отсылает измененный запрос серверу, идентифицированному URI. Шлюз - это принимающий агент, действующий как бы на уровень выше некоторого другого сервера(ов) и при необходимости транслирующий запросы в протокол основного сервера. Туннель действует как реле (relay) между двумя соединениями не изменяя сообщений; туннели используются, когда связь нужно производить через посредника (например firewall), который не понимает содержание сообщений.
Любая сторона соединения, которая действует не как туннель, может использовать внутренний кэш для обработки запросов. Эффект кэша заключается в том, что цепочка запросов/ответов сокращается, если один из участников в цепочке имеет кэшированный ответ, удовлетворяющий данному запросу. Далее показана цепочка, возникающая в том случае, когда B имеет кэшированую копию раннего ответа O (полеченного через C) на запрос, и который не был кэширован ни UA, ни A.
Не все ответы полезно кэшировать, а некоторые запросы могут содержать модификаторы, которые указывают специальные требования, управляющие поведением кэша.
Фактически, имеется широкое разнообразие архитектур и конфигураций кэшей и прокси-серверов, разрабатываемых в настоящее время или развернутых в World Wide Web; эти системы включают национальные иерархии прокси-кэшей, которые сохраняют пропускную способность межокеанских каналов, системы, которые распространяют по многим адресам содержимое кэша, организации, которые распространяют подмножества кэшируемых данных на CD-ROM, и так далее. HTTP системы используются в корпоративных интранет-сетях с высокоскоростными линиями связи, и для доступа через PDA с маломощными радиолиниями и неустойчивой связью. Цель HTTP/1.1 состоит в поддержании широкого многообразия конфигураций, уже построенных при введении ранних версий протокола, а также в удовлетворении потребностей разработчиков web приложений, требующих все более высокой надежности.
HTTP соединение обычно происходит посредством TCP/IP соединений. Заданный по умолчанию порт TCP - 80, но могут использоваться и другие порты (например: 8080, 8081). HTTP также может быть реализован посредством любого другого протокола Интернет, или других сетей. HTTP необходима только надежная передача данных, следовательно может использоваться любой протокол, который гарантирует надежную передачу данных; отображение структуры запроса и ответа HTTP/1.1 на транспортные модули данных рассматриваемого протокола - вопрос, не решается на уровне самого протокола.
Большинство реализаций HTTP/1.0 использовало новое соединение для каждого обмена запросом/ответом. В HTTP/1.1, установленное соединение может использоваться для одного или нескольких обменов запросом/ответом, хотя соединение может быть закрыто по ряду причин.
3. Параметры протокола.
3.1 Версия HTTP.
HTTP использует схему нумерации типа "<major>.<minor>", для указания версии протокола. Стратегия версификации протокола предназначена для того, чтобы позволить отправителю указать формат сообщения и свои способности понимания для дальнейшей HTTP связи, прежде чем он получит что-либо посредством этой связи. При добавлении компонентов сообщения, которые не воздействуют на процесс связи, или компонентов, которые добавляются только к расширяемым значениям поля, номер версии не меняется. Когда внесенные в протокол изменения добавляют возможности, которые не изменяют общий алгоритм анализа сообщений, но расширяют семантику сообщения и подразумевают дополнительные возможности отправителя, увеличивается <minor> номер. Когда изменяется формат сообщения протокола увеличивается <major> номер.
Версия HTTP сообщения обозначается полем HTTP-version в первой строке сообщения.
HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
Major и minor числа должны обрабатываться как отдельные целые числа и что каждое может состоять более чем из одной цифры. Таким образом, HTTP/2.4 - более низкая версия, чем HTTP/2.13, которая в свою очередь ниже чем HTTP/12.3. Нули должны игнорироваться получателями и не должны посылаться.
Приложения, посылающие сообщения запросов или ответов, которые описывает спецификация HTTP/1.1, должны указывать версию HTTP (HTTP-version) "HTTP/1.1". Использование этого номера версии указывает, что посылающее приложение по крайней мере условно совместимо с этой спецификацией.
HTTP версия приложения - это самая высокая HTTP версия, с которой приложение является по крайней мере условно совместимым ним.
Приложения, реализующие прокси-сервера и шлюзы, должны обрабатывать протокольные сообщения различных версий. Начиная с момента, когда версия протокола указывает возможности отправителя, прокси-сервер/шлюз никогда не должен посылать сообщения, версия которых больше, чем HTTP версия отправителя; если получена более высокая версия запроса, то прокси-сервер/шлюз должен или понизить версию запроса, вернув сообщение об ошибке, или переключиться на туннельное поведение. У запросов, версия которых ниже, чем HTTP версия прокси-сервера/шлюза можно перед пересылкой увеличить версию; ответ прокси-сервера/шлюза на этот запрос должен иметь ту же самую major версию, что и запрос.