2007-08 / 2007-08-10

前のエントリ: めんたいこスパ [diary]
次のエントリ: アラビアータ [diary]

部分get
2007-08-10-1 / カテゴリ: [HTTP] / [permlink]

Range リクエストヘッダを使う
RFC 2068: Hypertext Transfer Protocol - HTTP/1.1

ダウンロード支援アプリの類でのレジューム機能は、この辺使ってるのかな。


先頭から20バイトのみget
% telnet localhost http
GET / HTTP/1.1
Host: localhost
Range: bytes=0-19

HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 20
Content-Range: bytes 0-19/1494
Content-Type: text/html

<!DOCTYPE html PUBLI

21バイト目から40バイト目までget
GET / HTTP/1.1
Host: localhost
Range: bytes=20-39

HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 20
Content-Range: bytes 20-39/1494
Content-Type: text/html

C "-//W3C//DTD XHTML

ラスト20バイト
GET / HTTP/1.1
Host: localhost
Range: bytes=-20

HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 20
Content-Range: bytes 1474-1493/1494
Content-Type: text/html

</body>
</html>

または
GET / HTTP/1.1
Host: localhost
Range: bytes=1474-

HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 20
Content-Range: bytes 1474-1493/1494
Content-Type: text/html

</body>
</html>


複数のレンジを同時指定
GET / HTTP/1.1
Host: localhost
Range: bytes=0-20,-20

HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 232
Content-Type: multipart/byteranges; boundary=4374f5c82c93650c


--4374f5c82c93650c
Content-type: text/html
Content-range: bytes 0-20/1494

<!DOCTYPE html PUBLIC
--4374f5c82c93650c
Content-type: text/html
Content-range: bytes 1474-1493/1494

</body>
</html>


--4374f5c82c93650c--
おぉ、マルチパートになってる

データが存在するレンジと存在しないレンジが両方含まれる場合
GET / HTTP/1.1
Host: localhost
Range: bytes=1474-1495

HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 20
Content-Range: bytes 1474-1493/1494
Content-Type: text/html

</body>
</html>
はみ出てる部分は無視されるっぽい。

指定レンジがまったく存在しない場合
GET / HTTP/1.1
Host: localhost
Range: bytes=1500-

HTTP/1.1 416 Requested Range Not Satisfiable
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

18e
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>416 Requested Range Not Satisfiable</title>
</head><body>
(中略)
</body></html>

0
416エラーになった。
先頭の 18e と、末尾の 0 は何だ? レスポンスヘッダの Transferr-Encoding: chunked が関係ありそう。Content-Length もないし。

post のレスポンスも可
POST / HTTP/1.1
Host: localhost
Range: bytes=0-19
Content-length: 10

abcdefghij
HTTP/1.1 206 Partial Content
Server: Apache/2.0.59 (Win32) PHP/4.4.6
Accept-Ranges: bytes
Content-Length: 20
Content-Range: bytes 0-19/1494
Content-Type: text/html

<!DOCTYPE html PUBLI
前のエントリ: めんたいこスパ [diary]
次のエントリ: アラビアータ [diary]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12