Squid経由でダウンロードを再開する
再開前にRangeレスポンスとオブジェクトの同一性を確認します。Squidの先読み方針と基本的なRange対応を区別します。
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 -は既存ファイルのサイズを再開位置として使います。返された本文を何でも不足分のバイトとみなさず、接続先のレスポンスを調べます。
| レスポンス | 意味 |
|---|---|
| Content-Range付きの206 | 返された範囲が、期待する続きになっているか確認する。 |
| 200 | サーバーがRangeを無視し、表現全体を送った可能性がある。 |
| 416 | 要求した範囲を満たせない。エラーページをファイルに追記しない。 |
バリデーターとIf-Rangeは、変化するリソースの異なるバージョンをつなぐことの防止に役立ちます。完成したファイルを信頼する前に、アプリの表現に関する規則に従ってください。
Squid 6.13のrange_offset_limitが決めるのは、キャッシュのためにオブジェクトを先頭から取得する条件です。クライアントが範囲を要求できるかどうかではありません。
range_offset_limit 0上限をゼロにすると、キャッシュを埋めるためだけに先頭部分を余分に取得しなくなります。オブジェクトをキャッシュしなくても、必要な範囲を正しく転送できれば成功です。通常のHTTPS CONNECTではRangeのやり取りは接続先TLSの内部にあります。Squidから見えるオブジェクトキャッシュの方針が内部リクエストを制御すると思わず、接続先のレスポンスを読んでください。