Предлагаю ввести новый заголовок в протокол HTTP, предназначенный для поиска битых частей файлов.
Ни для кого не секрет. что часто бывает. что скачивая большой архивный файл он оказывается "битым" и получается не известно - повреждение архива произошло на стадии закачивания файла на сервер или его скачивания, т.е. "битый" архив на сервере или на клиенте.
Для проверки можно ввести проверку файлов с помощью хеш-функций. К примеру: загрузив файл на сервер можно составить хеш-карту файла: список хешей каждого мегабайта исходного файла и сравнить со списком загруженного файла, если списки совпадают, значит файл на сервере такой же, как и у клиента.
Если же нет - появляется возможность определить какой из фрагментов оказался загружен не правильно и перезагрузить только различающиеся фрагменты, но не файл целиком.
Таким образом, в частности, можно снизить нагрузку на сеть, т.к. большие файлы не будут перекачиваться заново.
Данную возможность желательно внедрить именно в сам протокол HTTP, т.к. сам сервер может по запросу строить карту хешей.
При этом, можно рассмотреть два варианта работы карты: линейная и древовидная.
Линейная карта хешей.
Данный способ рекомендуется к применению со статическими файлами, которые не изменяются. В данном случае можно построить карту хешей в виде простого списка: один хеш на каждый мегабайт файла. Тогда клиенту можно отдавать для проверки полностью данный файл и клиент будет строить и сверять свою линейную карту с картой расположенной на сервере.
Данный способ лоялен к располагаемым ресурсам - карта строится один раз при загрузке файла и далее не изменяется.
Древовидная карта хешей.
Данный вид карты представляет собой бинарное дерево от всего файла и далее делением участков файла "пополам" и получением хешей данных участков. Данный вариант подходит для интерактивного поиска поврежденного фрагмента, или же изменившегося фрагмента файла. Предназначен для изменяющихся во времени файлов, например, создание бекапов серверов с дальнейшим копированием на удаленный сервер.
Клиент в данном случае запрашивает хеш для определенного фрагмента файла, который указывается через стандартный заголовок "Content-Range". Сервер считает хеш для указанного клиентом участка и отправляет в ответ.
Таким образом, клиент может бинарным поиском найти изменившийся или поврежденный участок файла.
Сервер отвечает с заголовком, например, "MD5: ..." для указанного клиентом участка.