Поле Content-MD5 в HTTP-ответе универсальное?

Я попытался загрузить файлы с разных серверов, а не все они отвечают поля Content-MD5 в своих заголовках.

Я хотел знать, является ли это стандартом для ответа HTTP без хэша файла ресурсов или нет?

спасибо

Ответ 1

Поле заголовка Content-MD5 MAY будет сгенерировано исходным сервером или клиентом для работы в качестве проверки целостности объекта-объекта. Только исходные серверы или клиенты MAY генерируют поле заголовка Content-MD5; прокси и шлюзы НЕ ДОЛЖНЫ генерировать его, так как это может привести к его значению как сквозной проверки целостности. Любой получатель сущности, включая шлюзы и прокси, МАЙ, проверяет, что значение дайджеста в этом поле заголовка соответствует значению тела объекта в виде приема

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

По состоянию на июнь 2014 года:

Поле заголовка Content-MD5 было удалено, поскольку оно было    несовместимо с частичными ответами.

RFC 7231 - Протокол передачи гипертекста (HTTP/1.1): семантика и контент - http://tools.ietf.org/html/rfc7231 (стр. 92)

Ответ 3

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

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

Что делать, если вы загружаете более 20 Гб файла, не имея возможности обнаружить несоответствие раньше? Нельзя загружать загружаемые файлы на p2p без частичной проверки, поддерживаемой хэш-функцией.

Итак, теперь нужно придерживаться деревьев Меркле. Gnutella (как G1, так и G2) и DС++ (как NMDC, так и ADC) используют TTH (TIGER Tree Hash), в то время как eDonkey 2k использует AICH, но один использует этот хеш, и он менее изящный. Таким образом, TTH является стандартом де-факто, и было бы неплохо, если бы все хэши файлов повсюду (даже если это не было строго необходимо) были по умолчанию TTH, но мы еще не были.

DС++ не основан на HTTP, но Gnutella (1 и 2) есть, поэтому вы можете изучать и/или поддерживать эти HTTP-заголовки. Например, Shareaza может перехватывать загрузки из браузеров и выгружать их в p2p, используя заголовки Alt-Location, Content-URN, X-Thex-URI.