Загрузка через HTTPS надежна?
Иногда мы сталкиваемся с проблемой поврежденных файлов после загрузки по протоколу HTTP.
Сегодня я прочитал статью, в которой говорится, что протокол TCP не является надежным на 100% из-за слабого алгоритма CRC и других вещей.
Как я понял из RFC, HTTPS использует TLS поверх TCP и использует хеш-функции при обработке. Т.е. целостность данных дополнительно контролируется.
Могу ли я считать загрузку надежной на 100% (или насколько более надежной?), Если я просто переключу протокол на HTTPS?
2 ответа
Хотя TCP (протокол, на котором построен http/https) имеет обнаружение ошибок в виде контрольной суммы на борту (которая запускает повторные передачи), он не является пуленепробиваемым. Это очень редко, но многочисленные перевороты в одном и том же пакете могут привести к правильной контрольной сумме. Если остальная часть пакета все еще не повреждена, эти ошибки могут полностью проникнуть в ваше приложение. Я удобно пропускаю обнаружение / исправление ошибок в нижних уровнях передачи здесь.
Как правило, алгоритмы шифрования включают гораздо более надежные контрольные суммы, как часть безопасности данных. TLS/SSL (через TCP), безусловно, делает, так что ваш вывод является технически обоснованным.
Тем не менее, обратите внимание, что это очень, очень редко; в том же масштабе, что и ошибки в оперативной памяти (не ECC), кабелях sata и дисковом хранилище (как на стороне сервера, так и на стороне клиента!). В целях обеспечения надежности переключаться на https без учета других потенциальных проблем глупо и никогда не достигнет 100% надежности.
По моему опыту, вполне вероятно, что причина в какой-то другой части системы (приложение, обрабатывающее выгруженные данные, может быть преобразование формата в базе данных без вывода сообщений,...).
Вся эта проблема касается и протоколов, отличных от http.
Кстати, статья, на которую вы ссылаетесь, старше 11 лет.
Я никогда не слышал о том, чтобы HTTPS был более надежным, чем HTTP (и даже не слышал о том, чтобы HTTP был ненадежным), поэтому я не думаю, что это будет иметь значение. Однако я могу ошибаться.
Бит, что я бы сказал, это то, что прежде чем вы начнете указывать пальцем на протокол, вы абсолютно уверены, что ваша процедура загрузки или приложение не вызывает проблемы? Например, я сталкивался с удивительными проблемами загрузки / выгрузки в PHP раньше, которые сбивали с толку, но в итоге их легко было исправить.
Вы также фактически не упоминаете, что вы загружаете, его размер и уровень коррупции.