Возобновление загрузок через Squid
Проверьте Range-ответы и идентичность объекта перед возобновлением файла и отличайте политику предварительной загрузки Squid от базовой поддержки диапазонов.
Возобновляйте загрузку, только если download.part относится к тому же представлению объекта, которое вы запросите сейчас. Одного имени файла недостаточно: источник мог изменить содержимое после первой попытки.
curl --proxy http://proxy.example:3128 --noproxy '' --connect-timeout 5 --max-time 60 -C - --output download.part http://files.example/test.binЗамените оба адреса сервисами, которыми вам разрешено пользоваться. Для сравнения общедоступного файла там, где публичные прокси допустимы, возьмите HTTP-узел из списка HTTP-прокси. -C - использует размер имеющегося файла как точку продолжения. Изучите ответ назначения, а не считайте любое пришедшее тело недостающими байтами:
| Ответ | Значение |
|---|---|
| 206 с Content-Range | Проверьте, что возвращённый диапазон — ожидаемое продолжение. |
| 200 | Сервер мог проигнорировать Range и отправить полное представление. |
| 416 | Запрошенный диапазон невыполним; не дописывайте страницу ошибки в файл. |
Валидаторы и If-Range помогают избежать склейки разных версий меняющегося ресурса. Соблюдайте правила представления в приложении, прежде чем доверять готовому файлу.
В Squid 6.13 range_offset_limit определяет, когда объект загружается с начала для кеширования, а не может ли клиент запросить диапазон:
range_offset_limit 0Нулевой предел исключает лишнюю загрузку начала только ради заполнения кеша. Передача полезного диапазона без кеширования объекта всё равно может быть успешной. При обычном HTTPS CONNECT обмен Range находится внутри TLS назначения; читайте этот ответ, а не воспринимайте видимую политику объектного кеша Squid как управление внутренним запросом.