うまいぼうぶろぐ

linuxとhttpdとperlのメモ

Rangeリクエスト勉強

ボディの一部分を取得するとき。レジュームによる再DLとか。

応答は206 Partial Contentになる。ただし、apachecgi/ssiを使っていて、Centent-Lengthを返さない場合はRangeリクエストされても、200 OKでボディ全体を返す。

cgi/ssi でもアプリ側でContent-Lengthヘッダをつけたり、apacheのmod_deflateと組み合わしてContent-LengthヘッダをつければRangeリクエストにも対応する。

$ telnet localhost 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Thu, 22 Jul 2010 01:28:39 GMT
Server: Apache
Last-Modified: Tue, 03 Mar 2009 08:31:07 GMT
Accept-Ranges: bytes      # bytes単位でRangeリクエストに対応してるのがわかる
Content-Length: 4000
Connection: close
Content-Type: text/html
$ telent localhost 80
GET / HTTP/1.0
Range: bytes=0-90

HTTP/1.1 206 Partial Content
Date: Thu, 22 Jul 2010 01:31:33 GMT
Server: Apache
Last-Modified: Tue, 03 Mar 2009 08:27:25 GMT
Accept-Ranges: bytes
Content-Length: 91
Content-Range: bytes 0-90/4000 # 4000 bytes 中 0-90バイトを取得
Connection: close
Content-Type: text/html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta