Дополнительные возможности HTTP

Sep 07, 2009 12:46

Предлагаю ввести новый заголовок в протокол HTTP, предназначенный для поиска битых частей файлов.

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

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

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

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

Данную возможность желательно внедрить именно в сам протокол HTTP, т.к. сам сервер может по запросу строить карту хешей.

При этом, можно рассмотреть два варианта работы карты: линейная и древовидная.

Линейная карта хешей.

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

Данный способ лоялен к располагаемым ресурсам - карта строится один раз при загрузке файла и далее не изменяется.

Древовидная карта хешей.

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

Клиент в данном случае запрашивает хеш для определенного фрагмента файла, который указывается через стандартный заголовок "Content-Range". Сервер считает хеш для указанного клиентом участка и отправляет в ответ.

Таким образом, клиент может бинарным поиском найти изменившийся или поврежденный участок файла.

Сервер отвечает с заголовком, например, "MD5: ..." для указанного клиентом участка.
Previous post Next post
Up