|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Докачка и фрагментарное скачивание
Допустим, вымышленная организация предлагает скачать с сайта видео прошедшей конференции по адресу http://example.org/conf-2009.avi объёмом примерно 160 МБ. Рассмотрим, как происходит докачивание этого файла в случае сбоя и как менеджер закачек организовал бы многопоточную загрузку нескольких фрагментов. В обоих случаях клиенты произведут свой первый запрос наподобие этого: GET /conf-2009.avi HTTP/1.0Host: example.orgAccept: */*User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)Referer: http://example.org/Заголовок Referer указывает, что файл был запрошен с главной страницы сайта. Менеджеры закачек обычно тоже его указывают, чтобы эмулировать переход со страницы сайта. Без него сервер может ответить 403 (Access Forbidden), если не допускаются запросы с других сайтов. В нашем случае сервер вернул успешный ответ: HTTP/1.1 200 OKDate: Thu, 19 Feb 2009 12:27:04 GMTServer: Apache/2.2.3Last-Modified: Wed, 18 Jun 2003 16:05:58 GMTETag: "56d-9989200-1132c580"Content-Type: video/x-msvideoContent-Length: 160993792Accept-Ranges: bytesConnection: close (пустая строка)(двоичное содержимое всего файла)Заголовок Accept-Ranges информирует клиента о том, что он может запрашивать у сервера фрагменты, указывая их смещения от начала файла в байтах. Если этот заголовок отсутствует, то клиент может предупредить пользователя, что докачать файл, скорее всего, не удастся. Исходя из значения заголовка Content-Length, менеджер закачек поделит весь объём на равные фрагменты и запросит их по отдельности, организовав несколько потоков. Если сервер не укажет размер, то клиенту параллельное скачивание реализовать не удастся, но при этом он сможет докачивать файл, пока сервер не ответит 416 (Requested Range Not Satisfiable). Допустим, на 84-м мегабайте соединение с Интернетом прервалось и процесс загрузки приостановился. Когда соединение с Интернетом было восстановлено, менеджер закачек автоматически послал новый запрос на сервер, но с указанием выдать содержимое с 84-го мегабайта: GET /conf-2009.avi HTTP/1.0Host: example.orgAccept: */*User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)Range: bytes=88080384-Referer: http://example.org/Сервер не обязан помнить, какие и от кого запросы были до этого, и поэтому клиент снова вставил заголовок Referer, как будто это его самый первый запрос. Указанное значение заголовка Range говорит серверу — «выдай содержимое от 88080384-го байта до самого конца». В связи с этим сервер вернёт ответ: HTTP/1.1 206 Partial ContentDate: Thu, 19 Feb 2009 12:27:08 GMTServer: Apache/2.2.3Last-Modified: Wed, 18 Jun 2003 16:05:58 GMTETag: "56d-9989200-1132c580"Accept-Ranges: bytesContent-Range: bytes 88080384-160993791/160993792Content-Length: 72913408Connection: closeContent-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.0Range: bytes=64397516-80496894Ответ сервера в этом случае будет следующим (часть заголовков опущена — см. полный пример выше): HTTP/1.1 206 Partial ContentAccept-Ranges: bytesContent-Range: bytes 64397516-80496894/160993792Content-Length: 16099379 (пустая строка)(двоичное содержимое 4-ой части)Если подобный запрос отправить серверу, который не поддерживает фрагменты, то он вернёт стандартный ответ 200 (OK) как было показано в самом начале, но без заголовка Accept-Ranges. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |