2010/1 | ||||||
---|---|---|---|---|---|---|
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | ||||||
2010/2 | ||||||
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | ||||||
2010/3 | ||||||
1 | 2 | 3 | 4 | 5 | 6 |
a person powered by ototoy blog
モヘンジョだろ!!dolipoなどのネット高速化ユーティリティやDownThemAll!などのブラウザプラグイン形式のダウンロードユーティリティが、高速化の為に使っているのはHTTPリクエストで大きなファイルを分割するように指示し、大きなファイルを待っている間、他のメディアファイル(画像やSWFなど)が転送できない問題を解決するという手法のようだ。
このようなテクニックはRANGEヘッダやIF-RANGEヘッダで実現するのだが、ototoyの場合ダウンロードファイルは動的に生成し、用が済んだら削除するため、リクエストがRANGEごとに分かれて多重に来たとしても応えることが難しい。不可能とは言えないが、完全にユーザーにファイルが渡ったか判断するのはかなり困難だ。
そこで、今日ふとRANGE付きのリクエストに全部403 Forbiddenレスポンスを返してみたらどうなるだろうということを思いついて早速開発環境で実験してみた。つまり、403でユーティリティ側が「あ、ダメなんだね」って気がついて、改めてファイルの全レンジを普通にダウンロードし直すだろうという仮説と期待に基づいて、拒否ってみたわけだ。
サーバログを見ながらDownThemAll!で試してみたが、結果、ダウンロードは完走せずNGだった。ログを見てると、やはりRANGEヘッダでの多重リクエストが検出され、そこで意図通りスクリプトは403を返しているのだが。
403の定義を読んでみると、リクエストに対応できない場合も返していいようなことが書いてあったので、ユーティリティ側で403が返って来た場合の処理を適切に書けば問題は解決するはずなのだが。
というわけで、手抜きの割には良いKludgeだと思ったのだがあえなく挫折。手間をかけてRANGE対応するしかないような雰囲気だ。
コメント