各種データ収集の際、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などの、動的コンテンツでは効果無い、かもです。(たぶん)