HTTP

Поделись знанием:
Перейти к: навигация, поиск
К:Википедия:Статьи без источников (тип: не указан)
HTTP
Название:

Hypertext Transfer Protocol

Уровень (по модели OSI):

Прикладной

Семейство:

TCP/IP

Создан в:

1992 г.

Порт/ID:

80/TCP

Спецификация:

RFC 1945, RFC 2616

Основные реализации (клиенты):

Веб-браузеры, например Internet Explorer, Mozilla Firefox, Opera, Google Chrome и др.

Основные реализации (серверы):

Apache, IIS, nginx, Google Web Server и др.

HTTP
Постоянное соединение · Сжатие · HTTPS
Методы
OPTIONS · GET · HEAD · POST · PUT · DELETE · TRACE · CONNECT · PATCH
Заголовки
Cookie · ETag · Location · Referer
DNT · X-Forwarded-For
Коды состояния
301 Moved permanently
302 Found
303 See Other
403 Forbidden
404 Not Found
451 Unavailable for Legal Reasons

HTTP (англ. HyperText Transfer Protocol — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов в формате «HTML», в настоящий момент используется для передачи произвольных данных). Основой HTTP является технология «клиент-сервер», то есть предполагается существование:

  • Потребителей (клиентов), которые инициируют соединение и посылают запрос;
  • Поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.

HTTP в настоящее время повсеместно используется во Всемирной паутине для получения информации с веб-сайтов. В 2006 году — в Северной Америке доля HTTP-трафика превысила долю P2P-сетей и составила 46 %, из которых почти половина — это передача потокового видео и звука[1].

HTTP используется также в качестве «транспорта» для других протоколов прикладного уровня, таких как SOAP, XML-RPC, WebDAV.

Основным объектом манипуляции в HTTP является ресурс, на который указывает URI (Uniform Resource Identifier) в запросе клиента. Обычно такими ресурсами являются хранящиеся на сервере файлы, но ими могут быть логические объекты или что-то абстрактное. Особенностью протокола HTTP является возможность указать в запросе и ответе способ представления одного и того же ресурса по различным параметрам: формату, кодировке, языку и т. д. (в частности, для этого используется HTTP-заголовок). Именно благодаря возможности указания способа кодирования сообщения, клиент и сервер могут обмениваться двоичными данными, хотя данный протокол является текстовым.

HTTP — протокол прикладного уровня; аналогичными ему являются FTP и SMTP. Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами (например, «куки» на стороне клиента, «сессии» на стороне сервера). Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.





Программное обеспечение

Всё программное обеспечение для работы с протоколом HTTP разделяется на три большие категории:

  • Серверы как основные поставщики услуг хранения и обработки информации (обработка запросов);
  • Клиенты — конечные потребители услуг сервера (отправка запроса);
  • Прокси (посредники) для выполнения транспортных служб.

Для отличия конечных серверов от прокси, в официальной документации используется термин «исходный сервер» (англ. origin server). Один и тот же программный продукт может одновременно выполнять функции клиента, сервера или посредника в зависимости от поставленных задач. В спецификациях протокола HTTP подробно описывается поведение для каждой из этих ролей.

Клиенты

Первоначально, протокол HTTP разрабатывался для доступа к гипертекстовым документам Всемирной паутины. Поэтому основными реализациями клиентов являются браузеры (агенты пользователя). Для просмотра сохранённого содержимого сайтов на компьютере без соединения с Интернетом, были придуманы офлайн-браузеры. При нестабильном соединении, для загрузки больших файлов используются менеджеры закачек; они позволяют в любое время докачать указанные файлы после потери соединения с веб-сервером. Некоторые виртуальные атласы (такие как Google Планета Земля и NASA World Wind) тоже используют HTTP.

Нередко протокол HTTP используется программами для скачивания обновлений.

Целый комплекс программ-роботов используется в поисковых системах Интернета. Среди них веб-пауки (краулеры), которые производят проход по гиперссылкам, составляют базу данных ресурсов серверов и сохраняют их содержимое для дальнейшего анализа.

Исходные серверы

Основные реализации: Apache, Internet Information Services (IIS), nginx, Google Web Server, lighttpd.

Прокси-серверы

Основные реализации: Squid, UserGate, Multiproxy, Naviscope, nginx.

История развития

HTTP/0.9
HTTP был предложен в марте 1991 года Тимом Бернерсом-Ли, работавшим тогда в CERN, как механизм для доступа к документам в Интернете и облегчения навигации посредством использования гипертекста. Самая ранняя версия протокола HTTP/0.9 была впервые опубликована в январе 1992 г. (хотя реализация датируется 1990 годом). Спецификация протокола привела к упорядочению правил взаимодействия между клиентами и серверами HTTP, а также чёткому разделению функций между этими двумя компонентами. Были задокументированы основные синтаксические и семантические положения.
HTTP/1.0
В мае 1996 года — для практической реализации HTTP был выпущен информационный документ RFC 1945, что послужило основой для реализации большинства компонентов HTTP/1.0.
HTTP/1.1
Современная версия протокола; принята в июне 1999 года[2]. Новым в этой версии был режим «постоянного соединения»: TCP-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию об имени хоста, к которому он обращается, что сделало возможной более простую организацию виртуального хостинга.
HTTP/2 
11 февраля 2015 года — опубликованы финальные версии черновика следующей версии протокола. В отличие от предыдущих версий, протокол HTTP/2 является бинарным. Среди ключевых особенностей: мультиплексирование запросов, расстановка приоритетов для запросов, сжатия заголовков, загрузка нескольких элементов параллельно, посредством одного TCP-соединения, поддержка проактивных push-уведомлений со стороны сервера[3].

Структура протокола

Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:

  1. Стартовая строка (англ. Starting line) — определяет тип сообщения;
  2. Заголовки (англ. Headers) — характеризуют тело сообщения, параметры передачи и прочие сведения;
  3. Тело сообщения (англ. Message Body) — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.

Заголовки и тело сообщения могут отсутствовать, но стартовая строка является обязательным элементом, так как указывает на тип запроса/ответа. Исключением является версия 0.9 протокола, у которой сообщение запроса содержит только стартовую строку, а сообщения ответа только тело сообщения.

Для версии протокола 1.1, сообщение запроса обязательно должно содержать заголовок Host.

Стартовая строка

Стартовые строки различаются для запроса и ответа. Строка запроса выглядит так:

GET URI — для версии протокола 0.9;
Метод URI HTTP/Версия — для остальных версий.

Здесь:

Чтобы запросить страницу данной статьи, клиент должен передать строку (задан всего один заголовок):

GET /wiki/HTTP HTTP/1.0
Host: ru.wikipedia.org

Стартовая строка ответа сервера имеет следующий формат: HTTP/Версия КодСостояния Пояснение, где:

Например, стартовая строка ответа сервера на предыдущий запрос может выглядеть так:

HTTP/1.0 200 OK

Методы

Метод HTTP (англ. HTTP Method) — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. Обратите внимание, что название метода чувствительно к регистру.

Каждый сервер обязан поддерживать как минимум методы GET и HEAD. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он неприменим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов.

Кроме методов GET и HEAD, часто применяется метод POST.

OPTIONS

Используется для определения возможностей веб-сервера или параметров соединения для конкретного ресурса. В ответ серверу следует включить заголовок Allow со списком поддерживаемых методов. Также в заголовке ответа может включаться информация о поддерживаемых расширениях.

Предполагается, что запрос клиента может содержать тело сообщения для указания интересующих его сведений. Формат тела и порядок работы с ним в настоящий момент не определён; сервер пока должен его игнорировать. Аналогичная ситуация и с телом в ответе сервера.

Для того, чтобы узнать возможности всего сервера, клиент должен указать в URI звёздочку — «*». Запросы «OPTIONS * HTTP/1.1» могут также применяться для проверки работоспособности сервера (аналогично «пингованию») и тестирования на предмет поддержки сервером протокола HTTP версии 1.1.

Результат выполнения этого метода не кэшируется.

GET

Используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. В этом случае в тело ответного сообщения следует включить информацию о ходе выполнения процесса.

Клиент может передавать параметры выполнения запроса в URI целевого ресурса после символа «?»:
GET /path/resource?param1=value1&param2=value2 HTTP/1.1

Согласно стандарту HTTP, запросы типа GET считаются идемпотентными[4]

Кроме обычного метода GET, различают ещё:

Порядок выполнения подобных запросов определён стандартами отдельно.

HEAD

Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело. Запрос HEAD обычно применяется для извлечения метаданных, проверки наличия ресурса (валидация URL) и чтобы узнать, не изменился ли он с момента последнего обращения.

Заголовки ответа могут кэшироваться. При несовпадении метаданных ресурса с соответствующей информацией в кэше — копия ресурса помечается как устаревшая.

POST

Применяется для передачи пользовательских данных заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. Аналогично с помощью метода POST обычно загружаются файлы на сервер.

В отличие от метода GET, метод POST не считается идемпотентным[4], то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться очередная копия этого комментария).

При результате выполнения 200 (Ok) в тело ответа следует включить сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует вернуть ответ 201 (Created) с указанием URI нового ресурса в заголовке Location.

Сообщение ответа сервера на выполнение метода POST не кэшируется.

PUT

Применяется для загрузки содержимого запроса на указанный в запросе URI. Если по заданному URI не существует ресурс, то сервер создаёт его и возвращает статус 201 (Created). Если же был изменён ресурс, то сервер возвращает 200 (Ok) или 204 (No Content). Сервер не должен игнорировать некорректные заголовки Content-*, передаваемые клиентом вместе с сообщением. Если какой-то из этих заголовков не может быть распознан или не допустим при текущих условиях, то необходимо вернуть код ошибки 501 (Not Implemented).

Фундаментальное различие методов POST и PUT заключается в понимании предназначений URI ресурсов. Метод POST предполагает, что по указанному URI будет производиться обработка передаваемого клиентом содержимого. Используя PUT, клиент предполагает, что загружаемое содержимое соответствует находящемуся по данному URI ресурсу.

Сообщения ответов сервера на метод PUT не кэшируются.

PATCH

Аналогично PUT, но применяется только к фрагменту ресурса.

DELETE

Удаляет указанный ресурс.

TRACE

Возвращает полученный запрос так, что клиент может увидеть, какую информацию промежуточные серверы добавляют или изменяют в запросе.

CONNECT

Преобразует соединение запроса в прозрачный TCP/IP-туннель, обычно чтобы содействовать установлению защищённого SSL-соединения через нешифрованный прокси.

Коды состояния

Код состояния является частью первой строки ответа сервера. Он представляет собой целое число из трёх цифр[5]. Первая цифра указывает на класс состояния. За кодом ответа обычно следует отделённая пробелом поясняющая фраза на английском языке, которая разъясняет человеку причину именно такого ответа. Примеры:

201 Webpage Created
403 Access allowed only for registered users
507 Insufficient Storage

Клиент узнаёт по коду ответа о результатах его запроса и определяет, какие действия ему предпринимать дальше. Набор кодов состояния является стандартом, и они описаны в соответствующих документах RFC. Введение новых кодов должно производиться только после согласования с IETF. Клиент может не знать все коды состояния, но он обязан отреагировать в соответствии с классом кода.

В настоящее время выделено пять классов кодов состояния.

Код Класс Назначение
1xx Информационный

(англ. informational)

Информирование о процессе передачи.

В HTTP/1.0 — сообщения с такими кодами должны игнорироваться.

В HTTP/1.1 — клиент должен быть готов принять этот класс сообщений как обычный ответ, но ничего отправлять серверу не нужно.

Сами сообщения от сервера содержат только стартовую строку ответа и, если требуется, несколько специфичных для ответа полей заголовка. Прокси-серверы подобные сообщения должны отправлять дальше от сервера к клиенту.

2xx Успех

(англ. Success)

Информирование о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса, сервер может ещё передать заголовки и тело сообщения.
3xx Перенаправление

(англ. Redirection)

Сообщает клиенту, что для успешного выполнения операции необходимо сделать другой запрос (как правило по другому URI). Из данного класса пять кодов 301, 302, 303, 305 и 307 относятся непосредственно к перенаправлениям (редирект). Адрес, по которому клиенту следует произвести запрос, сервер указывает в заголовке Location. При этом допускается использование фрагментов в целевом URI.
4xx Ошибка клиента

(англ. Client Error)

Указание ошибок со стороны клиента. При использовании всех методов, кроме HEAD, сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя.
5xx Ошибка сервера

(англ. Server Error)

Информирование о случаях неудачного выполнения операции по вине сервера. Для всех ситуаций, кроме использования метода HEAD, сервер должен включать в тело сообщения объяснение, которое клиент отобразит пользователю.

Заголовки

Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару параметр-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA (см. RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.

Примеры заголовков:

Server: Apache/2.2.11 (Win32) PHP/5.3.0
Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT
Content-Type: text/plain; charset=windows-1251
Content-Language: ru

В примере выше каждая строка представляет собой один заголовок. При этом то, что находится до первого двоеточия, называется именем (англ. name), а что после неё — значением (англ. value).

Все заголовки разделяются на четыре основных группы:

  1. General Headers («Основные заголовки») — могут включаться в любое сообщение клиента и сервера;
  2. Request Headers («Заголовки запроса») — используются только в запросах клиента;
  3. Response Headers («Заголовки ответа») — только для ответов от сервера;
  4. Entity Headers («Заголовки сущности») — сопровождают каждую сущность сообщения.

Именно в таком порядке рекомендуется посылать заголовки получателю.

Все необходимые для функционирования HTTP заголовки описаны в основных RFC. Если не хватает существующих, то можно вводить свои. Традиционно к именам таких дополнительных заголовков добавляют префикс «X-» для избежания конфликта имён с возможно существующими. Например, как в заголовках X-Powered-By или X-Cache. Некоторые разработчики используют свои индивидуальные префиксы. Примерами таких заголовков могут служить Ms-Echo-Request и Ms-Echo-Reply, введённые корпорацией Microsoft для расширения WebDAV.

Тело сообщения

Тело HTTP-сообщения (message-body), если оно присутствует, используется для передачи тела объекта, связанного с запросом или ответом. Тело сообщения отличается от тела объекта (entity-body) только в том случае, когда применяется кодирование передачи, что указывается полем заголовка Transfer-Encoding.

message-body = entity-body
| <entity-body закодировано согласно
Transfer-Encoding>

Поле Transfer-Encoding должно использоваться для указания любого кодирования передачи, примененного приложением в целях гарантирования безопасной и правильной передачи сообщения. Поле Transfer-Encoding — это свойство сообщения, а не объекта, и, таким образом, может быть добавлено или удалено любым приложением в цепочке запросов/ответов.

Правила, устанавливающие допустимость тела сообщения в сообщении, отличны для запросов и ответов.

Присутствие тела сообщения в запросе отмечается добавлением к заголовкам запроса поля заголовка Content-Length или Transfer-Encoding. Тело сообщения может быть добавлено в запрос, только когда метод запроса допускает тело объекта.

Включается или не включается тело сообщения в сообщение ответа — зависит как от метода запроса, так и от кода состояния ответа. Все ответы на запрос с методом HEAD не должны включать тело сообщения, даже если присутствуют поля заголовка объекта (entity-header), заставляющие поверить в присутствие объекта. Никакие ответы с кодами состояния 1xx (Информационные), 204 (Нет содержимого, No Content), и 304 (Не модифицирован, Not Modified) не должны содержать тела сообщения. Все другие ответы содержат тело сообщения, даже если оно имеет нулевую длину.

Примеры диалогов HTTP

Обычный GET-запрос

Запрос клиента:

GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
(пустая строка)  

Ответ сервера:

HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 11:20:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
(пустая строка)
(далее следует запрошенная страница в HTML)

Аналогично выглядит ответ 203. Что существенно — непосредственно запрашиваемые данные отделены от HTTP-заголовков с помощью CRLF CRLF (двух переводов строки).

Перенаправления

Предположим, что у вымышленной компании «Example Corp.» есть основной сайт по адресу «example.com» и домен-псевдоним «example.org». Клиент посылает запрос страницы «О компании» на вторичный домен (часть заголовков опущена):

GET /about.html HTTP/1.1
Host: example.org
User-Agent: MyLonelyBrowser/5.0

Так как домен «example.org» не является основным и компания не собирается в будущем его использовать в других целях, их сервер вернёт код для постоянного перенаправления, указав в заголовке Location целевой URL:

HTTP/1.x 301 Moved Permanently
Location: example.com/about.html#contacts
Date: Thu, 19 Feb 2009 11:08:01 GMT
Server: Apache/2.2.4
Content-Type: text/html; charset=windows-1251
Content-Length: 110
(пустая строка)
<html><body><a href="example.com/about.html#contacts">Click here</a></body></html>

В заголовке Location можно указывать фрагменты как в данном примере. Браузер не указал фрагмент в запросе, так как его интересует весь документ. Но он автоматически прокрутит страницу до фрагмента «contacts», как только загрузит её. В тело ответа также был помещён короткий HTML-документ со ссылкой, с помощью которой посетитель попадёт на целевую страницу, если браузер не перейдёт на неё автоматически. Заголовок Content-Type содержит характеристики именно этого HTML-пояснения, а не документа, который находится по целевому URI.

Допустим, эта же компания «Example Corp.» имеет несколько региональных представительств по всему миру. И для каждого представительства у них есть сайт с соответствующим ccTLD. Запрос главной страницы основного сайта «example.com» может выглядеть так:

GET / HTTP/1.1
Host: example.com
User-Agent: MyLonelyBrowser/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7

Сервер принял во внимание заголовок Accept-Language и сформировал ответ со временным перенаправлением на российский сервер «example.ru», указав его адрес в заголовке Location:

HTTP/1.x 302 Found
Location: example.ru/
Cache-Control: private
Date: Thu, 19 Feb 2009 11:08:01 GMT
Server: Apache/2.2.6
Content-Type: text/html; charset=windows-1251
Content-Length: 82
(пустая строка)
<html><body><a href="example.ru">Example Corp.</a></body></html>

Обратите внимание на заголовок Cache-Control: значение «private» сообщает остальным серверам (в первую очередь прокси) что ответ может кэшироваться только на стороне клиента. В противном случае не исключено, что следующие посетители из других стран будут переходить всё время не в своё представительство.

Для перенаправления также используются коды ответа 303 (See Other) и 307 (Temporary Redirect).

Докачка и фрагментарное скачивание

Допустим, вымышленная организация предлагает скачать с сайта видео прошедшей конференции по адресу: «example.org/conf-2009.avi» — объёмом примерно 160 МБ. Рассмотрим, как происходит докачивание этого файла в случае сбоя и как менеджер закачек организовал бы многопоточную загрузку нескольких фрагментов.

В обоих случаях клиенты произведут свой первый запрос наподобие этого:

GET /conf-2009.avi HTTP/1.0
Host: example.org
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)
Referer: example.org/

Заголовок Referer указывает, что файл был запрошен с главной страницы сайта. Менеджеры закачек обычно тоже его указывают, чтобы эмулировать переход со страницы сайта. Без него сервер может ответить 403 (Access Forbidden), если не допускаются запросы с других сайтов. В нашем случае сервер вернул успешный ответ:

HTTP/1.1 200 OK
Date: Thu, 19 Feb 2009 12:27:04 GMT
Server: Apache/2.2.3
Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT
ETag: "56d-9989200-1132c580"
Content-Type: video/x-msvideo
Content-Length: 160993792
Accept-Ranges: bytes
Connection: close
(пустая строка)
(двоичное содержимое всего файла)

Заголовок Accept-Ranges информирует клиента о том, что он может запрашивать у сервера фрагменты, указывая их смещения от начала файла в байтах. Если этот заголовок отсутствует, то клиент может предупредить пользователя, что докачать файл, скорее всего, не удастся.

Исходя из значения заголовка Content-Length, менеджер закачек поделит весь объём на равные фрагменты и запросит их по отдельности, организовав несколько потоков. Если сервер не укажет размер, то клиенту параллельное скачивание реализовать не удастся, но при этом он сможет докачивать файл, пока сервер не ответит416 (Requested Range Not Satisfiable).

Допустим, на 84-м мегабайте соединение с Интернетом прервалось и процесс загрузки приостановился. Когда соединение с Интернетом было восстановлено, менеджер закачек автоматически послал новый запрос на сервер, но с указанием выдать содержимое с 84-го мегабайта:

GET /conf-2009.avi HTTP/1.0
Host: example.org
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)
Range: bytes=88080384-
Referer: example.org/

Сервер не обязан помнить, какие и от кого запросы были до этого, и поэтому клиент снова вставил заголовок Referer, как будто это его самый первый запрос. Указанное значение заголовка Range говорит серверу: «Выдай содержимое от 88080384-го байта до самого конца». В связи с этим сервер вернёт ответ:

HTTP/1.1 206 Partial Content
Date: Thu, 19 Feb 2009 12:27:08 GMT
Server: Apache/2.2.3
Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT
ETag: "56d-9989200-1132c580"
Accept-Ranges: bytes
Content-Range: bytes 88080384-160993791/160993792
Content-Length: 72913408
Connection: close
Content-Type: video/x-msvideo
(пустая строка)
(двоичное содержимое от 84-го мегабайта)

Заголовок Accept-Ranges здесь уже не обязателен, так как клиент уже знает об этой возможности сервера. О том, что передаётся фрагмент, клиент узнаёт по коду 206 (Partial Content). В заголовке Content-Range содержится информация о данном фрагменте: номера начального и конечного байта, а после слэша — суммарный объём всего файла в байтах. Обратите внимание на заголовок Content-Length — в нём указывается размер тела сообщения, то есть передаваемого фрагмента. Если сервер вернёт несколько фрагментов, то Content-Length будет содержать их суммарный объём.

Теперь вернёмся к менеджеру закачек. Зная суммарный объём файла «conf-2009.avi», программа поделила его на 10 равных секций.

Начальную менеджер загрузит при самом первом запросе, прервав соединение как только дойдёт до начала второго. Остальные он запросит отдельно. Например, 4-я секция будет запрошена со следующими заголовками (часть заголовков опущена — см. полный пример выше):

GET /conf-2009.avi HTTP/1.0
Range: bytes=64397516-80496894

Ответ сервера в этом случае будет следующим (часть заголовков опущена — см. полный пример выше):

HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 64397516-80496894/160993792
Content-Length: 16099379
(пустая строка)
(двоичное содержимое 4-й части)

Если подобный запрос отправить серверу, который не поддерживает фрагменты, то он вернёт стандартный ответ 200 (OK) как было показано в самом начале, но без заголовка Accept-Ranges.

См. также частичные GET, байтовые диапазоны, ответ 206, ответ 416.

Основные механизмы протокола

Частичные GET

HTTP позволяет запросить не сразу всё содержимое ресурса, а только указанный фрагмент. Такие запросы называются частичные GET; возможность их выполнения необязательна (но желательна) для серверов. Частичные GET в основном используются для докачки файлов и быстрого параллельного скачивания в нескольких потоках. Некоторые программы скачивают заголовок архива, выводят пользователю внутреннюю структуру, а потом уже запрашивают фрагменты с указанными элементами архива.

Для получения фрагмента, клиент посылает серверу запрос с заголовком Range, указывая в нём необходимые байтовые диапазоны. Если сервер не понимает частичные запросы (игнорирует заголовок Range), то он вернёт всё содержимое со статусом 200, как и при обычном GET. В случае успешного выполнения, сервер возвращает вместо кода 200 ответ со статусом 206 (Partial Content), включая в ответ заголовок Content-Range. Сами фрагменты могут быть переданы двумя способами:

Условные GET

Метод GET изменяется на «условный GET», если сообщение запроса включает в себя поле заголовка If-Modified-Since. В ответ на «условный GET», тело запрашиваемого ресурса передаётся только если он изменялся после даты, указанной в заголовке If-Modified-Since. Алгоритм определения этого включает в себя следующие случаи:

Использование метода условный GET направлено на разгрузку сети, так как он позволяет не передавать по сети избыточную информацию.

Согласование содержимого

Согласование содержимого (англ. Content Negotiation) — механизм автоматического определения необходимого ресурса при наличии нескольких разнотипных версий документа. Субъектами согласования могут быть не только ресурсы сервера, но и возвращаемые страницы с сообщениями об ошибках (403, 404 и т. п.).

Различают два основных типа согласований:

Одновременно могут быть использованы оба типа или каждый из них по отдельности.

В основной спецификации по протоколу (RFC 2616) также выделяется так называемое прозрачное согласование (англ. Transparent Negotiation) как предпочтительный вариант комбинирования обоих типов. Последний механизм не следует путать с независимой технологией Transparent Content Negotiation (TCN, «Прозрачное согласование содержимого», см. RFC 2295), которая не является частью протокола HTTP, но может использоваться с ним. У обоих существенное различие в принципе работы и самом значении слова «прозрачное» (transparent). В спецификации по HTTP под прозрачностью подразумевается, что процесс не заметен для клиента и сервера, а в технологии TCN прозрачность означает доступность полного списка вариантов ресурса для всех участников процесса доставки данных.

Управляемое сервером

При наличии нескольких версий ресурса сервер может анализировать заголовки запроса клиента, чтобы выдать, по его мнению, наиболее подходящую. В основном анализируются заголовки Accept, Accept-Charset, Accept-Encoding, Accept-Languages и User-Agent. Серверу желательно включать в ответ заголовок Vary с указанием параметров, по которым различается содержимое по запрашиваемому URI.

Географическое положение клиента можно определить по удалённому IP-адресу. Это возможно за счёт того что IP-адреса, как и доменные имена, регистрируются на конкретного человека или организацию. При регистрации указывается регион, в котором будет использоваться желаемое адресное пространство. Эти данные общедоступны, и в Интернете можно найти соответствующие свободно распространяемые базы данных и готовые программные модули для работы с ними (следует ориентироваться на ключевые слова «Geo IP»).

Следует помнить что такой метод способен определить местоположение максимум с точностью до города (отсюда определяется и страна). При этом информация актуальна только на момент регистрации адресного пространства. Например, если московский провайдер зарегистрирует диапазон адресов с указанием Москвы и начнёт предоставлять доступ клиентам из ближайшего Подмосковья, то его абоненты могут на некоторых сайтах наблюдать, что они из Москвы, а не из Красногорска или Дзержинского.

Управляемое сервером согласование имеет несколько недостатков:

Управляемое клиентом

В данном случае тип содержимого определяется только на стороне клиента. Для этого сервер возвращает в ответе с кодом состояния 300 (Multiple Choices) или 406 (Not Acceptable) список вариантов, среди которых пользователь выбирает подходящий. Управляемое клиентом согласование хорошо, когда содержимое различается по самым частым параметрам (например, по языку и кодировке) и используется публичный кэш.

Основной недостаток — лишняя нагрузка, так как приходится делать дополнительный запрос, чтобы получить нужное содержимое.

Прозрачное согласование

Данное согласование полностью прозрачно для клиента и сервера. В данном случае используется общий кэш, в котором содержится список вариантов, как для управляемого клиентом согласования. Если кэш понимает все эти варианты, то он сам делает выбор, как при управляемом сервером согласовании. Это снижает нагрузки с исходного сервера и исключает дополнительный запрос со стороны клиента.

В основной спецификации по протоколу HTTP механизм прозрачного согласования подробно не описан.

Множественное содержимое

Протокол HTTP поддерживает передачу нескольких сущностей в пределах одного сообщения. Причём сущности могут передаваться не только в виде одноуровневой последовательности, но в виде иерархии с вложением элементов друг в друга. Для обозначения множественного содержимого используются медиатипы multipart/*. Работа с такими типами осуществляется по общим правилам, описанным в RFC 2046 (если иное не определено конкретным медиатипом). Если получателю не известно как работать с типом, то он обрабатывает его так же, как multipart/mixed.

Параметр boundary означает разделитель между различными типами передаваемых сообщений. Например передаваемый из формы параметр DestAddress передает значение адреса e-mail, а следующий за ним элемент AttachedFile1 отправляет двоичное содержимое изображения формата .jpg

Со стороны сервера сообщения со множественным содержимым могут посылаться в ответ на частичные GET при запросе нескольких фрагментов ресурса. В этом случае используется медиатип multipart/byteranges.

Со стороны клиента при отправке HTML-формы чаще всего пользуются методом POST. Типичный пример: страницы отправки электронных писем со вложенными файлами. При отправке такого письма браузер формирует сообщение типа multipart/form-data, интегрируя в него как отдельные части, введённые пользователем, тему письма, адрес получателя, сам текст и вложенные файлы:

POST /send-message.html HTTP/1.1
Host: mail.example.com
Referer: mail.example.com/send-message.html
User-Agent: BrowserForDummies/4.67b
Content-Type: multipart/form-data; boundary="Asrf456BGe4h"
Content-Length: (суммарный объём, включая дочерние заголовки)
Connection: keep-alive
Keep-Alive: 300
(пустая строка)
(отсутствующая преамбула)
--Asrf456BGe4h
Content-Disposition: form-data; name="DestAddress"
(пустая строка)
brutal-vasya@example.com
--Asrf456BGe4h
Content-Disposition: form-data; name="MessageTitle"
(пустая строка)
Я негодую
--Asrf456BGe4h
Content-Disposition: form-data; name="MessageText"
(пустая строка)
Привет, Василий! Твой ручной лев, которого ты оставил
у меня на прошлой неделе, разодрал весь мой диван.
Пожалуйста, забери его скорее!
Во вложении две фотки с последствиями.
--Asrf456BGe4h
Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg"
Content-Type: image/jpeg
(пустая строка)
(двоичное содержимое первой фотографии)
--Asrf456BGe4h
Content-Disposition: form-data; name="AttachedFile2"; filename="horror-photo-2.jpg"
Content-Type: image/jpeg
(пустая строка)
(двоичное содержимое второй фотографии)
--Asrf456BGe4h--
(отсутствующий эпилог)

В примере в заголовках Content-Disposition параметр name соответствует атрибуту name в HTML-тегах <INPUT> и <TEXTAREA>. Параметр filename равен исходному имени файла на компьютере пользователя. Более подробная информация о формировании HTML-форм и вложении файлов в RFC 1867.

Особенности протокола

Большинство протоколов предусматривают установление TCP-сессии, в ходе которой один раз происходит авторизация, и дальнейшие действия выполняются в контексте этой авторизации. HTTP же устанавливает отдельную TCP-сессию на каждый запрос; в более поздних версиях HTTP было разрешено делать несколько запросов в ходе одной TCP-сессии, но браузеры обычно запрашивают только страницу и включённые в неё объекты (картинки, каскадные стили и т. п.), а затем сразу разрывают TCP-сессию. Для поддержки авторизованного (неанонимного) доступа в HTTP используются cookies; причём такой способ авторизации позволяет сохранить сессию даже после перезагрузки клиента и сервера.

При доступе к данным по FTP или по файловым протоколам тип файла (точнее, тип содержащихся в нём данных) определяется по расширению имени файла, что не всегда удобно. HTTP перед тем, как передать сами данные, передаёт заголовок «Content-Type: тип/подтип», позволяющую клиенту однозначно определить, каким образом обрабатывать присланные данные. Это особенно важно при работе с CGI-скриптами, когда расширение имени файла указывает не на тип присылаемых клиенту данных, а на необходимость запуска данного файла на сервере и отправки клиенту результатов работы программы, записанной в этом файле (при этом один и тот же файл в зависимости от аргументов запроса и своих собственных соображений может порождать ответы разных типов — в простейшем случае картинки в разных форматах).

Кроме того, HTTP позволяет клиенту прислать на сервер параметры, которые будут переданы запускаемому CGI-скрипту. Для этого же в HTML были введены формы.

Перечисленные особенности HTTP позволили создавать поисковые машины (первой из которых стала AltaVista, созданная фирмой DEC), форумы и Internet-магазины. Это коммерциализировало Интернет, появились компании, основным полем деятельности которых стало предоставление доступа в Интернет (провайдеры) и создание сайтов.

См. также

В Викисловаре есть статья «HTTP»

Напишите отзыв о статье "HTTP"

Примечания

  1. [net.compulenta.ru/322974/ Объём HTTP-трафика впервые превысил P2P] // Компьюлента, 22 июня 2007 ([www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf Официальный документ от Ellacoya Networks]).
  2. Впервые спецификация HTTP/1.1 была опубликована в январе 1997 [tools.ietf.org/html/rfc2068 RFC 2068]; в современной версии [tools.ietf.org/html/rfc2616 RFC 2616] исправлены опечатки, местами улучшены терминология и оформление. Также разъяснено допустимое поведение клиента (браузера), сервера и прокси-серверов в некоторых сомнительных ситуациях. То есть версия 1.1 появилась всё-таки в 1997 году.
  3. [tools.ietf.org/html/draft-ietf-httpbis-http2-17 HTTP/2 Draft]
  4. 1 2 [www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP/1.1: Method Definitions] (англ.). [www.webcitation.org/68e5RnSBE Архивировано из первоисточника 24 июня 2012].
  5. См. первое предложение раздела «6.1.1 Status Code and Reason Phrase» в RFC 2068. На стр. 40 есть также объявление в формате расширенной БНФ-формы (Augmented BNF (англ.)) «extension-code = 3DIGIT» для кодов расширений.

Ссылки

Отрывок, характеризующий HTTP

– Доложите князу, что я мост зажигал, – сказал полковник торжественно и весело.
– А коли про потерю спросят?
– Пустячок! – пробасил полковник, – два гусара ранено, и один наповал , – сказал он с видимою радостью, не в силах удержаться от счастливой улыбки, звучно отрубая красивое слово наповал .


Преследуемая стотысячною французскою армией под начальством Бонапарта, встречаемая враждебно расположенными жителями, не доверяя более своим союзникам, испытывая недостаток продовольствия и принужденная действовать вне всех предвидимых условий войны, русская тридцатипятитысячная армия, под начальством Кутузова, поспешно отступала вниз по Дунаю, останавливаясь там, где она бывала настигнута неприятелем, и отбиваясь ариергардными делами, лишь насколько это было нужно для того, чтоб отступать, не теряя тяжестей. Были дела при Ламбахе, Амштетене и Мельке; но, несмотря на храбрость и стойкость, признаваемую самим неприятелем, с которою дрались русские, последствием этих дел было только еще быстрейшее отступление. Австрийские войска, избежавшие плена под Ульмом и присоединившиеся к Кутузову у Браунау, отделились теперь от русской армии, и Кутузов был предоставлен только своим слабым, истощенным силам. Защищать более Вену нельзя было и думать. Вместо наступательной, глубоко обдуманной, по законам новой науки – стратегии, войны, план которой был передан Кутузову в его бытность в Вене австрийским гофкригсратом, единственная, почти недостижимая цель, представлявшаяся теперь Кутузову, состояла в том, чтобы, не погубив армии подобно Маку под Ульмом, соединиться с войсками, шедшими из России.
28 го октября Кутузов с армией перешел на левый берег Дуная и в первый раз остановился, положив Дунай между собой и главными силами французов. 30 го он атаковал находившуюся на левом берегу Дуная дивизию Мортье и разбил ее. В этом деле в первый раз взяты трофеи: знамя, орудия и два неприятельские генерала. В первый раз после двухнедельного отступления русские войска остановились и после борьбы не только удержали поле сражения, но прогнали французов. Несмотря на то, что войска были раздеты, изнурены, на одну треть ослаблены отсталыми, ранеными, убитыми и больными; несмотря на то, что на той стороне Дуная были оставлены больные и раненые с письмом Кутузова, поручавшим их человеколюбию неприятеля; несмотря на то, что большие госпитали и дома в Кремсе, обращенные в лазареты, не могли уже вмещать в себе всех больных и раненых, – несмотря на всё это, остановка при Кремсе и победа над Мортье значительно подняли дух войска. Во всей армии и в главной квартире ходили самые радостные, хотя и несправедливые слухи о мнимом приближении колонн из России, о какой то победе, одержанной австрийцами, и об отступлении испуганного Бонапарта.
Князь Андрей находился во время сражения при убитом в этом деле австрийском генерале Шмите. Под ним была ранена лошадь, и сам он был слегка оцарапан в руку пулей. В знак особой милости главнокомандующего он был послан с известием об этой победе к австрийскому двору, находившемуся уже не в Вене, которой угрожали французские войска, а в Брюнне. В ночь сражения, взволнованный, но не усталый(несмотря на свое несильное на вид сложение, князь Андрей мог переносить физическую усталость гораздо лучше самых сильных людей), верхом приехав с донесением от Дохтурова в Кремс к Кутузову, князь Андрей был в ту же ночь отправлен курьером в Брюнн. Отправление курьером, кроме наград, означало важный шаг к повышению.
Ночь была темная, звездная; дорога чернелась между белевшим снегом, выпавшим накануне, в день сражения. То перебирая впечатления прошедшего сражения, то радостно воображая впечатление, которое он произведет известием о победе, вспоминая проводы главнокомандующего и товарищей, князь Андрей скакал в почтовой бричке, испытывая чувство человека, долго ждавшего и, наконец, достигшего начала желаемого счастия. Как скоро он закрывал глаза, в ушах его раздавалась пальба ружей и орудий, которая сливалась со стуком колес и впечатлением победы. То ему начинало представляться, что русские бегут, что он сам убит; но он поспешно просыпался, со счастием как будто вновь узнавал, что ничего этого не было, и что, напротив, французы бежали. Он снова вспоминал все подробности победы, свое спокойное мужество во время сражения и, успокоившись, задремывал… После темной звездной ночи наступило яркое, веселое утро. Снег таял на солнце, лошади быстро скакали, и безразлично вправе и влеве проходили новые разнообразные леса, поля, деревни.
На одной из станций он обогнал обоз русских раненых. Русский офицер, ведший транспорт, развалясь на передней телеге, что то кричал, ругая грубыми словами солдата. В длинных немецких форшпанах тряслось по каменистой дороге по шести и более бледных, перевязанных и грязных раненых. Некоторые из них говорили (он слышал русский говор), другие ели хлеб, самые тяжелые молча, с кротким и болезненным детским участием, смотрели на скачущего мимо их курьера.
Князь Андрей велел остановиться и спросил у солдата, в каком деле ранены. «Позавчера на Дунаю», отвечал солдат. Князь Андрей достал кошелек и дал солдату три золотых.
– На всех, – прибавил он, обращаясь к подошедшему офицеру. – Поправляйтесь, ребята, – обратился он к солдатам, – еще дела много.
– Что, г. адъютант, какие новости? – спросил офицер, видимо желая разговориться.
– Хорошие! Вперед, – крикнул он ямщику и поскакал далее.
Уже было совсем темно, когда князь Андрей въехал в Брюнн и увидал себя окруженным высокими домами, огнями лавок, окон домов и фонарей, шумящими по мостовой красивыми экипажами и всею тою атмосферой большого оживленного города, которая всегда так привлекательна для военного человека после лагеря. Князь Андрей, несмотря на быструю езду и бессонную ночь, подъезжая ко дворцу, чувствовал себя еще более оживленным, чем накануне. Только глаза блестели лихорадочным блеском, и мысли изменялись с чрезвычайною быстротой и ясностью. Живо представились ему опять все подробности сражения уже не смутно, но определенно, в сжатом изложении, которое он в воображении делал императору Францу. Живо представились ему случайные вопросы, которые могли быть ему сделаны,и те ответы,которые он сделает на них.Он полагал,что его сейчас же представят императору. Но у большого подъезда дворца к нему выбежал чиновник и, узнав в нем курьера, проводил его на другой подъезд.
– Из коридора направо; там, Euer Hochgeboren, [Ваше высокородие,] найдете дежурного флигель адъютанта, – сказал ему чиновник. – Он проводит к военному министру.
Дежурный флигель адъютант, встретивший князя Андрея, попросил его подождать и пошел к военному министру. Через пять минут флигель адъютант вернулся и, особенно учтиво наклонясь и пропуская князя Андрея вперед себя, провел его через коридор в кабинет, где занимался военный министр. Флигель адъютант своею изысканною учтивостью, казалось, хотел оградить себя от попыток фамильярности русского адъютанта. Радостное чувство князя Андрея значительно ослабело, когда он подходил к двери кабинета военного министра. Он почувствовал себя оскорбленным, и чувство оскорбления перешло в то же мгновенье незаметно для него самого в чувство презрения, ни на чем не основанного. Находчивый же ум в то же мгновение подсказал ему ту точку зрения, с которой он имел право презирать и адъютанта и военного министра. «Им, должно быть, очень легко покажется одерживать победы, не нюхая пороха!» подумал он. Глаза его презрительно прищурились; он особенно медленно вошел в кабинет военного министра. Чувство это еще более усилилось, когда он увидал военного министра, сидевшего над большим столом и первые две минуты не обращавшего внимания на вошедшего. Военный министр опустил свою лысую, с седыми висками, голову между двух восковых свечей и читал, отмечая карандашом, бумаги. Он дочитывал, не поднимая головы, в то время как отворилась дверь и послышались шаги.
– Возьмите это и передайте, – сказал военный министр своему адъютанту, подавая бумаги и не обращая еще внимания на курьера.
Князь Андрей почувствовал, что либо из всех дел, занимавших военного министра, действия кутузовской армии менее всего могли его интересовать, либо нужно было это дать почувствовать русскому курьеру. «Но мне это совершенно всё равно», подумал он. Военный министр сдвинул остальные бумаги, сровнял их края с краями и поднял голову. У него была умная и характерная голова. Но в то же мгновение, как он обратился к князю Андрею, умное и твердое выражение лица военного министра, видимо, привычно и сознательно изменилось: на лице его остановилась глупая, притворная, не скрывающая своего притворства, улыбка человека, принимающего одного за другим много просителей.
– От генерала фельдмаршала Кутузова? – спросил он. – Надеюсь, хорошие вести? Было столкновение с Мортье? Победа? Пора!
Он взял депешу, которая была на его имя, и стал читать ее с грустным выражением.
– Ах, Боже мой! Боже мой! Шмит! – сказал он по немецки. – Какое несчастие, какое несчастие!
Пробежав депешу, он положил ее на стол и взглянул на князя Андрея, видимо, что то соображая.
– Ах, какое несчастие! Дело, вы говорите, решительное? Мортье не взят, однако. (Он подумал.) Очень рад, что вы привезли хорошие вести, хотя смерть Шмита есть дорогая плата за победу. Его величество, верно, пожелает вас видеть, но не нынче. Благодарю вас, отдохните. Завтра будьте на выходе после парада. Впрочем, я вам дам знать.
Исчезнувшая во время разговора глупая улыбка опять явилась на лице военного министра.
– До свидания, очень благодарю вас. Государь император, вероятно, пожелает вас видеть, – повторил он и наклонил голову.
Когда князь Андрей вышел из дворца, он почувствовал, что весь интерес и счастие, доставленные ему победой, оставлены им теперь и переданы в равнодушные руки военного министра и учтивого адъютанта. Весь склад мыслей его мгновенно изменился: сражение представилось ему давнишним, далеким воспоминанием.


Князь Андрей остановился в Брюнне у своего знакомого, русского дипломата .Билибина.
– А, милый князь, нет приятнее гостя, – сказал Билибин, выходя навстречу князю Андрею. – Франц, в мою спальню вещи князя! – обратился он к слуге, провожавшему Болконского. – Что, вестником победы? Прекрасно. А я сижу больной, как видите.
Князь Андрей, умывшись и одевшись, вышел в роскошный кабинет дипломата и сел за приготовленный обед. Билибин покойно уселся у камина.
Князь Андрей не только после своего путешествия, но и после всего похода, во время которого он был лишен всех удобств чистоты и изящества жизни, испытывал приятное чувство отдыха среди тех роскошных условий жизни, к которым он привык с детства. Кроме того ему было приятно после австрийского приема поговорить хоть не по русски (они говорили по французски), но с русским человеком, который, он предполагал, разделял общее русское отвращение (теперь особенно живо испытываемое) к австрийцам.
Билибин был человек лет тридцати пяти, холостой, одного общества с князем Андреем. Они были знакомы еще в Петербурге, но еще ближе познакомились в последний приезд князя Андрея в Вену вместе с Кутузовым. Как князь Андрей был молодой человек, обещающий пойти далеко на военном поприще, так, и еще более, обещал Билибин на дипломатическом. Он был еще молодой человек, но уже немолодой дипломат, так как он начал служить с шестнадцати лет, был в Париже, в Копенгагене и теперь в Вене занимал довольно значительное место. И канцлер и наш посланник в Вене знали его и дорожили им. Он был не из того большого количества дипломатов, которые обязаны иметь только отрицательные достоинства, не делать известных вещей и говорить по французски для того, чтобы быть очень хорошими дипломатами; он был один из тех дипломатов, которые любят и умеют работать, и, несмотря на свою лень, он иногда проводил ночи за письменным столом. Он работал одинаково хорошо, в чем бы ни состояла сущность работы. Его интересовал не вопрос «зачем?», а вопрос «как?». В чем состояло дипломатическое дело, ему было всё равно; но составить искусно, метко и изящно циркуляр, меморандум или донесение – в этом он находил большое удовольствие. Заслуги Билибина ценились, кроме письменных работ, еще и по его искусству обращаться и говорить в высших сферах.
Билибин любил разговор так же, как он любил работу, только тогда, когда разговор мог быть изящно остроумен. В обществе он постоянно выжидал случая сказать что нибудь замечательное и вступал в разговор не иначе, как при этих условиях. Разговор Билибина постоянно пересыпался оригинально остроумными, законченными фразами, имеющими общий интерес.
Эти фразы изготовлялись во внутренней лаборатории Билибина, как будто нарочно, портативного свойства, для того, чтобы ничтожные светские люди удобно могли запоминать их и переносить из гостиных в гостиные. И действительно, les mots de Bilibine se colportaient dans les salons de Vienne, [Отзывы Билибина расходились по венским гостиным] и часто имели влияние на так называемые важные дела.
Худое, истощенное, желтоватое лицо его было всё покрыто крупными морщинами, которые всегда казались так чистоплотно и старательно промыты, как кончики пальцев после бани. Движения этих морщин составляли главную игру его физиономии. То у него морщился лоб широкими складками, брови поднимались кверху, то брови спускались книзу, и у щек образовывались крупные морщины. Глубоко поставленные, небольшие глаза всегда смотрели прямо и весело.
– Ну, теперь расскажите нам ваши подвиги, – сказал он.
Болконский самым скромным образом, ни разу не упоминая о себе, рассказал дело и прием военного министра.
– Ils m'ont recu avec ma nouvelle, comme un chien dans un jeu de quilles, [Они приняли меня с этою вестью, как принимают собаку, когда она мешает игре в кегли,] – заключил он.
Билибин усмехнулся и распустил складки кожи.
– Cependant, mon cher, – сказал он, рассматривая издалека свой ноготь и подбирая кожу над левым глазом, – malgre la haute estime que je professe pour le православное российское воинство, j'avoue que votre victoire n'est pas des plus victorieuses. [Однако, мой милый, при всем моем уважении к православному российскому воинству, я полагаю, что победа ваша не из самых блестящих.]
Он продолжал всё так же на французском языке, произнося по русски только те слова, которые он презрительно хотел подчеркнуть.
– Как же? Вы со всею массой своею обрушились на несчастного Мортье при одной дивизии, и этот Мортье уходит у вас между рук? Где же победа?
– Однако, серьезно говоря, – отвечал князь Андрей, – всё таки мы можем сказать без хвастовства, что это немного получше Ульма…
– Отчего вы не взяли нам одного, хоть одного маршала?
– Оттого, что не всё делается, как предполагается, и не так регулярно, как на параде. Мы полагали, как я вам говорил, зайти в тыл к семи часам утра, а не пришли и к пяти вечера.
– Отчего же вы не пришли к семи часам утра? Вам надо было притти в семь часов утра, – улыбаясь сказал Билибин, – надо было притти в семь часов утра.
– Отчего вы не внушили Бонапарту дипломатическим путем, что ему лучше оставить Геную? – тем же тоном сказал князь Андрей.
– Я знаю, – перебил Билибин, – вы думаете, что очень легко брать маршалов, сидя на диване перед камином. Это правда, а всё таки, зачем вы его не взяли? И не удивляйтесь, что не только военный министр, но и августейший император и король Франц не будут очень осчастливлены вашей победой; да и я, несчастный секретарь русского посольства, не чувствую никакой потребности в знак радости дать моему Францу талер и отпустить его с своей Liebchen [милой] на Пратер… Правда, здесь нет Пратера.
Он посмотрел прямо на князя Андрея и вдруг спустил собранную кожу со лба.
– Теперь мой черед спросить вас «отчего», мой милый, – сказал Болконский. – Я вам признаюсь, что не понимаю, может быть, тут есть дипломатические тонкости выше моего слабого ума, но я не понимаю: Мак теряет целую армию, эрцгерцог Фердинанд и эрцгерцог Карл не дают никаких признаков жизни и делают ошибки за ошибками, наконец, один Кутузов одерживает действительную победу, уничтожает charme [очарование] французов, и военный министр не интересуется даже знать подробности.
– Именно от этого, мой милый. Voyez vous, mon cher: [Видите ли, мой милый:] ура! за царя, за Русь, за веру! Tout ca est bel et bon, [все это прекрасно и хорошо,] но что нам, я говорю – австрийскому двору, за дело до ваших побед? Привезите вы нам свое хорошенькое известие о победе эрцгерцога Карла или Фердинанда – un archiduc vaut l'autre, [один эрцгерцог стоит другого,] как вам известно – хоть над ротой пожарной команды Бонапарте, это другое дело, мы прогремим в пушки. А то это, как нарочно, может только дразнить нас. Эрцгерцог Карл ничего не делает, эрцгерцог Фердинанд покрывается позором. Вену вы бросаете, не защищаете больше, comme si vous nous disiez: [как если бы вы нам сказали:] с нами Бог, а Бог с вами, с вашей столицей. Один генерал, которого мы все любили, Шмит: вы его подводите под пулю и поздравляете нас с победой!… Согласитесь, что раздразнительнее того известия, которое вы привозите, нельзя придумать. C'est comme un fait expres, comme un fait expres. [Это как нарочно, как нарочно.] Кроме того, ну, одержи вы точно блестящую победу, одержи победу даже эрцгерцог Карл, что ж бы это переменило в общем ходе дел? Теперь уж поздно, когда Вена занята французскими войсками.
– Как занята? Вена занята?
– Не только занята, но Бонапарте в Шенбрунне, а граф, наш милый граф Врбна отправляется к нему за приказаниями.
Болконский после усталости и впечатлений путешествия, приема и в особенности после обеда чувствовал, что он не понимает всего значения слов, которые он слышал.
– Нынче утром был здесь граф Лихтенфельс, – продолжал Билибин, – и показывал мне письмо, в котором подробно описан парад французов в Вене. Le prince Murat et tout le tremblement… [Принц Мюрат и все такое…] Вы видите, что ваша победа не очень то радостна, и что вы не можете быть приняты как спаситель…
– Право, для меня всё равно, совершенно всё равно! – сказал князь Андрей, начиная понимать,что известие его о сражении под Кремсом действительно имело мало важности ввиду таких событий, как занятие столицы Австрии. – Как же Вена взята? А мост и знаменитый tete de pont, [мостовое укрепление,] и князь Ауэрсперг? У нас были слухи, что князь Ауэрсперг защищает Вену, – сказал он.
– Князь Ауэрсперг стоит на этой, на нашей, стороне и защищает нас; я думаю, очень плохо защищает, но всё таки защищает. А Вена на той стороне. Нет, мост еще не взят и, надеюсь, не будет взят, потому что он минирован, и его велено взорвать. В противном случае мы были бы давно в горах Богемии, и вы с вашею армией провели бы дурную четверть часа между двух огней.
– Но это всё таки не значит, чтобы кампания была кончена, – сказал князь Андрей.
– А я думаю, что кончена. И так думают большие колпаки здесь, но не смеют сказать этого. Будет то, что я говорил в начале кампании, что не ваша echauffouree de Durenstein, [дюренштейнская стычка,] вообще не порох решит дело, а те, кто его выдумали, – сказал Билибин, повторяя одно из своих mots [словечек], распуская кожу на лбу и приостанавливаясь. – Вопрос только в том, что скажет берлинское свидание императора Александра с прусским королем. Ежели Пруссия вступит в союз, on forcera la main a l'Autriche, [принудят Австрию,] и будет война. Ежели же нет, то дело только в том, чтоб условиться, где составлять первоначальные статьи нового Саmро Formio. [Кампо Формио.]
– Но что за необычайная гениальность! – вдруг вскрикнул князь Андрей, сжимая свою маленькую руку и ударяя ею по столу. – И что за счастие этому человеку!
– Buonaparte? [Буонапарте?] – вопросительно сказал Билибин, морща лоб и этим давая чувствовать, что сейчас будет un mot [словечко]. – Bu onaparte? – сказал он, ударяя особенно на u . – Я думаю, однако, что теперь, когда он предписывает законы Австрии из Шенбрунна, il faut lui faire grace de l'u . [надо его избавить от и.] Я решительно делаю нововведение и называю его Bonaparte tout court [просто Бонапарт].
– Нет, без шуток, – сказал князь Андрей, – неужели вы думаете,что кампания кончена?
– Я вот что думаю. Австрия осталась в дурах, а она к этому не привыкла. И она отплатит. А в дурах она осталась оттого, что, во первых, провинции разорены (on dit, le православное est terrible pour le pillage), [говорят, что православное ужасно по части грабежей,] армия разбита, столица взята, и всё это pour les beaux yeux du [ради прекрасных глаз,] Сардинское величество. И потому – entre nous, mon cher [между нами, мой милый] – я чутьем слышу, что нас обманывают, я чутьем слышу сношения с Францией и проекты мира, тайного мира, отдельно заключенного.
– Это не может быть! – сказал князь Андрей, – это было бы слишком гадко.
– Qui vivra verra, [Поживем, увидим,] – сказал Билибин, распуская опять кожу в знак окончания разговора.
Когда князь Андрей пришел в приготовленную для него комнату и в чистом белье лег на пуховики и душистые гретые подушки, – он почувствовал, что то сражение, о котором он привез известие, было далеко, далеко от него. Прусский союз, измена Австрии, новое торжество Бонапарта, выход и парад, и прием императора Франца на завтра занимали его.
Он закрыл глаза, но в то же мгновение в ушах его затрещала канонада, пальба, стук колес экипажа, и вот опять спускаются с горы растянутые ниткой мушкатеры, и французы стреляют, и он чувствует, как содрогается его сердце, и он выезжает вперед рядом с Шмитом, и пули весело свистят вокруг него, и он испытывает то чувство удесятеренной радости жизни, какого он не испытывал с самого детства.
Он пробудился…
«Да, всё это было!…» сказал он, счастливо, детски улыбаясь сам себе, и заснул крепким, молодым сном.


На другой день он проснулся поздно. Возобновляя впечатления прошедшего, он вспомнил прежде всего то, что нынче надо представляться императору Францу, вспомнил военного министра, учтивого австрийского флигель адъютанта, Билибина и разговор вчерашнего вечера. Одевшись в полную парадную форму, которой он уже давно не надевал, для поездки во дворец, он, свежий, оживленный и красивый, с подвязанною рукой, вошел в кабинет Билибина. В кабинете находились четыре господина дипломатического корпуса. С князем Ипполитом Курагиным, который был секретарем посольства, Болконский был знаком; с другими его познакомил Билибин.
Господа, бывавшие у Билибина, светские, молодые, богатые и веселые люди, составляли и в Вене и здесь отдельный кружок, который Билибин, бывший главой этого кружка, называл наши, les nфtres. В кружке этом, состоявшем почти исключительно из дипломатов, видимо, были свои, не имеющие ничего общего с войной и политикой, интересы высшего света, отношений к некоторым женщинам и канцелярской стороны службы. Эти господа, повидимому, охотно, как своего (честь, которую они делали немногим), приняли в свой кружок князя Андрея. Из учтивости, и как предмет для вступления в разговор, ему сделали несколько вопросов об армии и сражении, и разговор опять рассыпался на непоследовательные, веселые шутки и пересуды.
– Но особенно хорошо, – говорил один, рассказывая неудачу товарища дипломата, – особенно хорошо то, что канцлер прямо сказал ему, что назначение его в Лондон есть повышение, и чтоб он так и смотрел на это. Видите вы его фигуру при этом?…
– Но что всего хуже, господа, я вам выдаю Курагина: человек в несчастии, и этим то пользуется этот Дон Жуан, этот ужасный человек!
Князь Ипполит лежал в вольтеровском кресле, положив ноги через ручку. Он засмеялся.
– Parlez moi de ca, [Ну ка, ну ка,] – сказал он.
– О, Дон Жуан! О, змея! – послышались голоса.
– Вы не знаете, Болконский, – обратился Билибин к князю Андрею, – что все ужасы французской армии (я чуть было не сказал – русской армии) – ничто в сравнении с тем, что наделал между женщинами этот человек.
– La femme est la compagne de l'homme, [Женщина – подруга мужчины,] – произнес князь Ипполит и стал смотреть в лорнет на свои поднятые ноги.
Билибин и наши расхохотались, глядя в глаза Ипполиту. Князь Андрей видел, что этот Ипполит, которого он (должно было признаться) почти ревновал к своей жене, был шутом в этом обществе.
– Нет, я должен вас угостить Курагиным, – сказал Билибин тихо Болконскому. – Он прелестен, когда рассуждает о политике, надо видеть эту важность.
Он подсел к Ипполиту и, собрав на лбу свои складки, завел с ним разговор о политике. Князь Андрей и другие обступили обоих.
– Le cabinet de Berlin ne peut pas exprimer un sentiment d'alliance, – начал Ипполит, значительно оглядывая всех, – sans exprimer… comme dans sa derieniere note… vous comprenez… vous comprenez… et puis si sa Majeste l'Empereur ne deroge pas au principe de notre alliance… [Берлинский кабинет не может выразить свое мнение о союзе, не выражая… как в своей последней ноте… вы понимаете… вы понимаете… впрочем, если его величество император не изменит сущности нашего союза…]
– Attendez, je n'ai pas fini… – сказал он князю Андрею, хватая его за руку. – Je suppose que l'intervention sera plus forte que la non intervention. Et… – Он помолчал. – On ne pourra pas imputer a la fin de non recevoir notre depeche du 28 novembre. Voila comment tout cela finira. [Подождите, я не кончил. Я думаю, что вмешательство будет прочнее чем невмешательство И… Невозможно считать дело оконченным непринятием нашей депеши от 28 ноября. Чем то всё это кончится.]
И он отпустил руку Болконского, показывая тем, что теперь он совсем кончил.
– Demosthenes, je te reconnais au caillou que tu as cache dans ta bouche d'or! [Демосфен, я узнаю тебя по камешку, который ты скрываешь в своих золотых устах!] – сказал Билибин, y которого шапка волос подвинулась на голове от удовольствия.
Все засмеялись. Ипполит смеялся громче всех. Он, видимо, страдал, задыхался, но не мог удержаться от дикого смеха, растягивающего его всегда неподвижное лицо.
– Ну вот что, господа, – сказал Билибин, – Болконский мой гость в доме и здесь в Брюнне, и я хочу его угостить, сколько могу, всеми радостями здешней жизни. Ежели бы мы были в Брюнне, это было бы легко; но здесь, dans ce vilain trou morave [в этой скверной моравской дыре], это труднее, и я прошу у всех вас помощи. Il faut lui faire les honneurs de Brunn. [Надо ему показать Брюнн.] Вы возьмите на себя театр, я – общество, вы, Ипполит, разумеется, – женщин.
– Надо ему показать Амели, прелесть! – сказал один из наших, целуя кончики пальцев.
– Вообще этого кровожадного солдата, – сказал Билибин, – надо обратить к более человеколюбивым взглядам.
– Едва ли я воспользуюсь вашим гостеприимством, господа, и теперь мне пора ехать, – взглядывая на часы, сказал Болконский.
– Куда?
– К императору.
– О! о! о!
– Ну, до свидания, Болконский! До свидания, князь; приезжайте же обедать раньше, – пocлшaлиcь голоса. – Мы беремся за вас.
– Старайтесь как можно более расхваливать порядок в доставлении провианта и маршрутов, когда будете говорить с императором, – сказал Билибин, провожая до передней Болконского.
– И желал бы хвалить, но не могу, сколько знаю, – улыбаясь отвечал Болконский.
– Ну, вообще как можно больше говорите. Его страсть – аудиенции; а говорить сам он не любит и не умеет, как увидите.


На выходе император Франц только пристально вгляделся в лицо князя Андрея, стоявшего в назначенном месте между австрийскими офицерами, и кивнул ему своей длинной головой. Но после выхода вчерашний флигель адъютант с учтивостью передал Болконскому желание императора дать ему аудиенцию.
Император Франц принял его, стоя посредине комнаты. Перед тем как начинать разговор, князя Андрея поразило то, что император как будто смешался, не зная, что сказать, и покраснел.
– Скажите, когда началось сражение? – спросил он поспешно.
Князь Андрей отвечал. После этого вопроса следовали другие, столь же простые вопросы: «здоров ли Кутузов? как давно выехал он из Кремса?» и т. п. Император говорил с таким выражением, как будто вся цель его состояла только в том, чтобы сделать известное количество вопросов. Ответы же на эти вопросы, как было слишком очевидно, не могли интересовать его.
– В котором часу началось сражение? – спросил император.
– Не могу донести вашему величеству, в котором часу началось сражение с фронта, но в Дюренштейне, где я находился, войско начало атаку в 6 часу вечера, – сказал Болконский, оживляясь и при этом случае предполагая, что ему удастся представить уже готовое в его голове правдивое описание всего того, что он знал и видел.
Но император улыбнулся и перебил его:
– Сколько миль?
– Откуда и докуда, ваше величество?
– От Дюренштейна до Кремса?
– Три с половиною мили, ваше величество.
– Французы оставили левый берег?
– Как доносили лазутчики, в ночь на плотах переправились последние.
– Достаточно ли фуража в Кремсе?
– Фураж не был доставлен в том количестве…
Император перебил его.
– В котором часу убит генерал Шмит?…
– В семь часов, кажется.
– В 7 часов. Очень печально! Очень печально!
Император сказал, что он благодарит, и поклонился. Князь Андрей вышел и тотчас же со всех сторон был окружен придворными. Со всех сторон глядели на него ласковые глаза и слышались ласковые слова. Вчерашний флигель адъютант делал ему упреки, зачем он не остановился во дворце, и предлагал ему свой дом. Военный министр подошел, поздравляя его с орденом Марии Терезии З й степени, которым жаловал его император. Камергер императрицы приглашал его к ее величеству. Эрцгерцогиня тоже желала его видеть. Он не знал, кому отвечать, и несколько секунд собирался с мыслями. Русский посланник взял его за плечо, отвел к окну и стал говорить с ним.
Вопреки словам Билибина, известие, привезенное им, было принято радостно. Назначено было благодарственное молебствие. Кутузов был награжден Марией Терезией большого креста, и вся армия получила награды. Болконский получал приглашения со всех сторон и всё утро должен был делать визиты главным сановникам Австрии. Окончив свои визиты в пятом часу вечера, мысленно сочиняя письмо отцу о сражении и о своей поездке в Брюнн, князь Андрей возвращался домой к Билибину. У крыльца дома, занимаемого Билибиным, стояла до половины уложенная вещами бричка, и Франц, слуга Билибина, с трудом таща чемодан, вышел из двери.
Прежде чем ехать к Билибину, князь Андрей поехал в книжную лавку запастись на поход книгами и засиделся в лавке.
– Что такое? – спросил Болконский.
– Ach, Erlaucht? – сказал Франц, с трудом взваливая чемодан в бричку. – Wir ziehen noch weiter. Der Bosewicht ist schon wieder hinter uns her! [Ах, ваше сиятельство! Мы отправляемся еще далее. Злодей уж опять за нами по пятам.]
– Что такое? Что? – спрашивал князь Андрей.
Билибин вышел навстречу Болконскому. На всегда спокойном лице Билибина было волнение.
– Non, non, avouez que c'est charmant, – говорил он, – cette histoire du pont de Thabor (мост в Вене). Ils l'ont passe sans coup ferir. [Нет, нет, признайтесь, что это прелесть, эта история с Таборским мостом. Они перешли его без сопротивления.]
Князь Андрей ничего не понимал.
– Да откуда же вы, что вы не знаете того, что уже знают все кучера в городе?
– Я от эрцгерцогини. Там я ничего не слыхал.
– И не видали, что везде укладываются?
– Не видал… Да в чем дело? – нетерпеливо спросил князь Андрей.
– В чем дело? Дело в том, что французы перешли мост, который защищает Ауэсперг, и мост не взорвали, так что Мюрат бежит теперь по дороге к Брюнну, и нынче завтра они будут здесь.
– Как здесь? Да как же не взорвали мост, когда он минирован?
– А это я у вас спрашиваю. Этого никто, и сам Бонапарте, не знает.
Болконский пожал плечами.
– Но ежели мост перейден, значит, и армия погибла: она будет отрезана, – сказал он.
– В этом то и штука, – отвечал Билибин. – Слушайте. Вступают французы в Вену, как я вам говорил. Всё очень хорошо. На другой день, то есть вчера, господа маршалы: Мюрат Ланн и Бельяр, садятся верхом и отправляются на мост. (Заметьте, все трое гасконцы.) Господа, – говорит один, – вы знаете, что Таборский мост минирован и контраминирован, и что перед ним грозный tete de pont и пятнадцать тысяч войска, которому велено взорвать мост и нас не пускать. Но нашему государю императору Наполеону будет приятно, ежели мы возьмем этот мост. Проедемте втроем и возьмем этот мост. – Поедемте, говорят другие; и они отправляются и берут мост, переходят его и теперь со всею армией по сю сторону Дуная направляются на нас, на вас и на ваши сообщения.
– Полноте шутить, – грустно и серьезно сказал князь Андрей.
Известие это было горестно и вместе с тем приятно князю Андрею.
Как только он узнал, что русская армия находится в таком безнадежном положении, ему пришло в голову, что ему то именно предназначено вывести русскую армию из этого положения, что вот он, тот Тулон, который выведет его из рядов неизвестных офицеров и откроет ему первый путь к славе! Слушая Билибина, он соображал уже, как, приехав к армии, он на военном совете подаст мнение, которое одно спасет армию, и как ему одному будет поручено исполнение этого плана.
– Полноте шутить, – сказал он.
– Не шучу, – продолжал Билибин, – ничего нет справедливее и печальнее. Господа эти приезжают на мост одни и поднимают белые платки; уверяют, что перемирие, и что они, маршалы, едут для переговоров с князем Ауэрспергом. Дежурный офицер пускает их в tete de pont. [мостовое укрепление.] Они рассказывают ему тысячу гасконских глупостей: говорят, что война кончена, что император Франц назначил свидание Бонапарту, что они желают видеть князя Ауэрсперга, и тысячу гасконад и проч. Офицер посылает за Ауэрспергом; господа эти обнимают офицеров, шутят, садятся на пушки, а между тем французский баталион незамеченный входит на мост, сбрасывает мешки с горючими веществами в воду и подходит к tete de pont. Наконец, является сам генерал лейтенант, наш милый князь Ауэрсперг фон Маутерн. «Милый неприятель! Цвет австрийского воинства, герой турецких войн! Вражда кончена, мы можем подать друг другу руку… император Наполеон сгорает желанием узнать князя Ауэрсперга». Одним словом, эти господа, не даром гасконцы, так забрасывают Ауэрсперга прекрасными словами, он так прельщен своею столь быстро установившеюся интимностью с французскими маршалами, так ослеплен видом мантии и страусовых перьев Мюрата, qu'il n'y voit que du feu, et oubl celui qu'il devait faire faire sur l'ennemi. [Что он видит только их огонь и забывает о своем, о том, который он обязан был открыть против неприятеля.] (Несмотря на живость своей речи, Билибин не забыл приостановиться после этого mot, чтобы дать время оценить его.) Французский баталион вбегает в tete de pont, заколачивают пушки, и мост взят. Нет, но что лучше всего, – продолжал он, успокоиваясь в своем волнении прелестью собственного рассказа, – это то, что сержант, приставленный к той пушке, по сигналу которой должно было зажигать мины и взрывать мост, сержант этот, увидав, что французские войска бегут на мост, хотел уже стрелять, но Ланн отвел его руку. Сержант, который, видно, был умнее своего генерала, подходит к Ауэрспергу и говорит: «Князь, вас обманывают, вот французы!» Мюрат видит, что дело проиграно, ежели дать говорить сержанту. Он с удивлением (настоящий гасконец) обращается к Ауэрспергу: «Я не узнаю столь хваленую в мире австрийскую дисциплину, – говорит он, – и вы позволяете так говорить с вами низшему чину!» C'est genial. Le prince d'Auersperg se pique d'honneur et fait mettre le sergent aux arrets. Non, mais avouez que c'est charmant toute cette histoire du pont de Thabor. Ce n'est ni betise, ni lachete… [Это гениально. Князь Ауэрсперг оскорбляется и приказывает арестовать сержанта. Нет, признайтесь, что это прелесть, вся эта история с мостом. Это не то что глупость, не то что подлость…]
– С'est trahison peut etre, [Быть может, измена,] – сказал князь Андрей, живо воображая себе серые шинели, раны, пороховой дым, звуки пальбы и славу, которая ожидает его.
– Non plus. Cela met la cour dans de trop mauvais draps, – продолжал Билибин. – Ce n'est ni trahison, ni lachete, ni betise; c'est comme a Ulm… – Он как будто задумался, отыскивая выражение: – c'est… c'est du Mack. Nous sommes mackes , [Также нет. Это ставит двор в самое нелепое положение; это ни измена, ни подлость, ни глупость; это как при Ульме, это… это Маковщина . Мы обмаковались. ] – заключил он, чувствуя, что он сказал un mot, и свежее mot, такое mot, которое будет повторяться.
Собранные до тех пор складки на лбу быстро распустились в знак удовольствия, и он, слегка улыбаясь, стал рассматривать свои ногти.
– Куда вы? – сказал он вдруг, обращаясь к князю Андрею, который встал и направился в свою комнату.
– Я еду.
– Куда?
– В армию.
– Да вы хотели остаться еще два дня?
– А теперь я еду сейчас.
И князь Андрей, сделав распоряжение об отъезде, ушел в свою комнату.
– Знаете что, мой милый, – сказал Билибин, входя к нему в комнату. – Я подумал об вас. Зачем вы поедете?
И в доказательство неопровержимости этого довода складки все сбежали с лица.
Князь Андрей вопросительно посмотрел на своего собеседника и ничего не ответил.
– Зачем вы поедете? Я знаю, вы думаете, что ваш долг – скакать в армию теперь, когда армия в опасности. Я это понимаю, mon cher, c'est de l'heroisme. [мой дорогой, это героизм.]
– Нисколько, – сказал князь Андрей.
– Но вы un philoSophiee, [философ,] будьте же им вполне, посмотрите на вещи с другой стороны, и вы увидите, что ваш долг, напротив, беречь себя. Предоставьте это другим, которые ни на что более не годны… Вам не велено приезжать назад, и отсюда вас не отпустили; стало быть, вы можете остаться и ехать с нами, куда нас повлечет наша несчастная судьба. Говорят, едут в Ольмюц. А Ольмюц очень милый город. И мы с вами вместе спокойно поедем в моей коляске.
– Перестаньте шутить, Билибин, – сказал Болконский.
– Я говорю вам искренно и дружески. Рассудите. Куда и для чего вы поедете теперь, когда вы можете оставаться здесь? Вас ожидает одно из двух (он собрал кожу над левым виском): или не доедете до армии и мир будет заключен, или поражение и срам со всею кутузовскою армией.
И Билибин распустил кожу, чувствуя, что дилемма его неопровержима.
– Этого я не могу рассудить, – холодно сказал князь Андрей, а подумал: «еду для того, чтобы спасти армию».
– Mon cher, vous etes un heros, [Мой дорогой, вы – герой,] – сказал Билибин.


В ту же ночь, откланявшись военному министру, Болконский ехал в армию, сам не зная, где он найдет ее, и опасаясь по дороге к Кремсу быть перехваченным французами.
В Брюнне всё придворное население укладывалось, и уже отправлялись тяжести в Ольмюц. Около Эцельсдорфа князь Андрей выехал на дорогу, по которой с величайшею поспешностью и в величайшем беспорядке двигалась русская армия. Дорога была так запружена повозками, что невозможно было ехать в экипаже. Взяв у казачьего начальника лошадь и казака, князь Андрей, голодный и усталый, обгоняя обозы, ехал отыскивать главнокомандующего и свою повозку. Самые зловещие слухи о положении армии доходили до него дорогой, и вид беспорядочно бегущей армии подтверждал эти слухи.


Источник — «http://wiki-org.ru/wiki/index.php?title=HTTP&oldid=81538171»