各種データ収集の際、webページやデータファイルの先頭数バイトだけ欲しいときがたまに有ります。
そんな時には、Rangeヘッダを使うらしいです。
HTTP入門
以下 コード例
スクリプトを書いて 調べてみました。
opener = urllib2.build_opener() opener.addheaders = [ #これはお好みで #("User-agent", # "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"), #今回のキモ ("Range","bytes=0-1023"), ] uri="http://~~~取得したいページ~~~~" op=opener.open(uri,timeout=30) dat=op.read(1024) for i in op.headers.headers : print i op.close() ~~ あとはdatを好きにに料理~~
ネットワークの状態を表示させて受信データの量を調べてみると、
・Rangeヘッダ不使用だと(大きなファイルでも) 20kバイト
・Rangeヘッダを使った場合、およそ2kバイト
なので、データの転送量が10分の1に減ってるみたいです。
大きなファイルの場合、いきなり全部のデータが送られてくるわけではないのですが、転送量の最小サイズは送られてきてしまうので、Rangeヘッダで指定したほうが、若干、転送量が減る、みたいです。
ファイルを1000個ぐらいダウンロードすると若干サーバへの負荷が違ってくる、かも。
あと、今回調べたのはJPEG画像ファイルなど静的ファイルについて。
CGIやPHPなどの、動的コンテンツでは効果無い、かもです。(たぶん)