- PR -

HTTPのRangeヘッダを用いたファイルの分割ダウンロードアプリケーションについて

1
投稿者投稿内容
マコト
会議室デビュー日: 2004/10/04
投稿数: 2
投稿日時: 2004-10-04 11:16
始めての投稿です。宜しくお願いします。

巨大ファイルをクライアント側で受信する要件があり、下記URLを見ていましたら、
クライアントに対してファイルを分割して送信するように設計したほうがよいという
ことでしたので、HTTPのRangeヘッダを用いてファイルの分割ダウンロードアプリケーションを
作成しております。

http://www.atmarkit.co.jp/fjava/rensai2/webopt13/webopt13.html

作成にあたり上記URL記事中の
「■対策と注意事項→(3)ファイルの分割アップロード/ダウンロード」を参考にしながら
クライアント→サーバ時のHTTPヘッダに
Range: bytes=0-500,501-1000,1001-1500
上記タグを挿入したところ以下のようなレスポンスが返ってきました。

※テキストデータのほうがわかりやすいと思いましたので
ためしにXMLファイルを500bytesごとに分割して送信するよう要求してみました。

**サーバ→クライアント送信時のパケットキャプチャー内容**
//ここから
HTTP/1.1 200 OK
Date: Mon, 04 Oct 2004 01:37:23 GMT
Server: Apache/2.0.46 (Win32) mod_jk2/2.0.2
Content-Type: multipart/byteranges; boundary=3e5952fb33c12710
Content-Length: 1645
Connection: close

--3e5952fb33c12710

Content-type: text/xml; charset=utf-8
Content-range: bytes 0-500/1326

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:Lis_ZIPMTAResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://cgrip.com/zip/client/webservices">
<ns1:Lis_ZIPMTAReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:anyType[1]" xmlns:soapenc="http://schemas.xmlsoap.or

--3e5952fb33c12710

Content-type: text/xml; charset=utf-8
Content-range: bytes 501-1000/1326

g/soap/encoding/">
<item href="#id0"/>
</ns1:Lis_ZIPMTAReturn>
</ns1:Lis_ZIPMTAResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:sdbZIPMTA" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://cgrip.com/zip/client/webservices">
<CITY xsi:type="xsd:string">東京都</CITY>
<KANA_CITY xsi:type="xsd:string">トウキョウト</KANA_CITY>
<KANA_STATE xsi:type="xsd:string">チヨダ

--3e5952fb33c12710

Content-type: text/xml; charset=utf-8
Content-range: bytes 1001-1325/1326

ク</KANA_STATE>
<KANA_TOWN xsi:type="xsd:string">チヨダ</KANA_TOWN>
<STATE xsi:type="xsd:string">千代田区</STATE>
<TOWN xsi:type="xsd:string">千代田</TOWN>
<ZIPNO xsi:type="xsd:string">1000001</ZIPNO>
<ZZZNO xsi:type="xsd:string">35768</ZZZNO>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>

--3e5952fb33c12710--
//ここまで
*******************************

上記キャプチャー内容をみるとHTTPヘッダにて
Content-Type: multipart/byteranges; boundary=3e5952fb33c12710が
追加され--3e5952fb33c12710を間に入れながら
500bytes区切りで3つに分割して返しており、
パケット上ではあくまでも1パケットになっており、分割されておりません。

なんとかしてパケット自体を500bytes区切りで3つに分割したいのですが
HTTPのRangeヘッダを用いることで実現は可能なのでしょうか?
それともRangeヘッダの仕様なのでしょうか?もし仕様だった場合
他のヘッダを用いるなどして今回の要件の実現は可能でしょうか?

どなたかご存知の方がいらっしゃいましたらご教授ください。
宜しくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-04 12:58
希望通りの動きにしたいのであれば、

Range: bytes=0-500
Range: bytes=501-1000
Range: bytes=1001-1500

というリクエストを別々に送る必要があるでしょう。

Range: bytes=0-500,501-1000,1001-1500

では、

Range: bytes=0-1500

と同じ解釈をされてしまうと思います。
マコト
会議室デビュー日: 2004/10/04
投稿数: 2
投稿日時: 2004-10-04 13:52
おっしゃる通りリクエストを別々におくることで
問題解決いたしました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)