HttpWebRequest AddRange() с неподдерживаемым сервером

Я пишу некоторый код на C# для загрузки файлов с веб-серверов.

Я тестирую некоторые ссылки, которые поддерживают запрос 'byte-range', поэтому не уверен, что произойдет с неподдерживаемыми серверами.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("someUrl");
request.AddRange(someValue);

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

Надеюсь, мне это не нужно, потому что в некоторых случаях, например, на ссылках с диска Google, закрытие ответа и получение другого ответа занимает слишком много времени. Если сервер не поддерживает диапазоны байтов, то я не против загрузки с самого начала. Это происходит автоматически без кодирования?

1 ответ

Решение

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

Нет, если сервер не поддерживает диапазоны байтов, он просто отправит весь поток обратно клиенту. Это как если бы Range Заголовок HTTP-запроса отсутствовал. Таким образом, в основном, когда вы читаете поток ответа на клиенте, вы получите весь файл.

Поэтому, если вы обнаружите код состояния 200 (в отличие от 206 Partial Content) для запроса, который вы сделали, который включает в себя диапазоны байтов, вам не следует беспокоиться об отправке дополнительных ранжированных запросов, потому что сервер уже отправит вам весь файл.

Кстати, для того, чтобы определить, поддерживает ли сервер дистанционные загрузки, вы можете рассмотреть возможность отправки начального HEAD просьба определить возможности.

Другие вопросы по тегам