Range
リクエストヘッダ HTTP1.1
例:oj.setRequestHeader("Range","bytes=500-999");
【説明】エンティティの一部をリクエストします。 条件なしGETの場合は、成功したら ステータスは、200 (OK) の代わりに 206 (Partial Content)を返す。 条件付きの GET の場合は、条件が偽なら304。
【テスト内容】500~999バイト目をリクエストします。リクエストするファイルtest.txtの中身は、次の通り。
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111-222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222-333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333-444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444-555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555-666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666-777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777-888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888-999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc-ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd-eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff-
【結果】このテスト用ファイルの500~999バイト目である、6~0にかけての文字列が返ります。
【メモ】データの位置を指定して必要な部分だけリクエストしたり、ファイルを分割して受け取ったりできます。位置をバイト数で指定できますので、たとえば、固定長なフォーマットのデータを処理するという使い方も出来るかも。 【雑談】フラグメント
<meta http-equiv="content-script-type" content="text/javascript">
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>header Test</title>
<!-- ヘッダテスト用 -->
<script language = "JavaScript">
<!--
function createHttpRequest()
{
if(window.ActiveXObject){
//Win e4,e5,e6用
try {
return new ActiveXObject("Msxml2.XMLHTTP") ;
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP") ;
} catch (e2) {
return null ;
}
}
} else if(window.XMLHttpRequest){
//Win Mac Linux m1,f1,o8 Mac s1 Linux k3用
return new XMLHttpRequest() ;
} else {
return null ;
}
}
////
// メモ:このサンプルでは単純化のために、下記の通り、グローバル変数ojへ
// XMLHttpRequestのインスタンスを入れていますが、あまりお勧めしません。
// 複数リクエスト時に、前のレスポンスを上書きしてしまうからです。
// →回避例http://jsgt.org/mt/archives/01/000409.html
var oj = createHttpRequest();
oj.onreadystatechange =function ()
{
if ( oj.readyState == 4 ){
on_loaded1(oj);
}
}
//(new Date()).getTime()でキャッシュを騙す
oj.open("GET","./test.txt?"+(new Date()).getTime())
//Rangeをセット 500バイト目~999バイト目までをリクエスト
oj.setRequestHeader("Range","bytes=500-999");
oj.send("")
//コールバック関数 ( 受信時に実行されます )
function on_loaded1(oj)
{
//ステータスコード
status = "【ステータスコード】<br>"+oj.status
//レスポンスヘッダを取得
headers = "<br><br>【レスポンスヘッダ】<br>"+oj.getAllResponseHeaders().split('\n').join('<br>')
//レスポンスを取得
var res = "【サーバーから受信したtest.txtのデータ】<br>"+oj.responseText
//レスポンスされた文字列を表示
document.getElementById('outputdata').innerHTML=status+headers+res
}
//-->
</script>
<!-- ここへ出力 -->
<div id="outputdata"></div>
【サンプル】
【blog/Forums】
| JavaScript++かも日記 |