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++かも日記 |