っていうことを知らなかった。versionによるかも? 試したのは2.2.15。rangeリクエストはレジュームによる再DLとかで、コンテンツの一部を取得したいときに使う。他には携帯で動画をDLして再生するときとかに使われてる?
rangeリクエスト
rangeリクエストが正常に出来た場合は、応答は206 Partial Contentで返ってくる。でもapacheでcgi/ssiに対してrangeリクエスト送ってもstatus 200でコンテンツ全体が返ってきたので、おや?と調べてるうちにタイトルの結果に辿り付いた。
cgiでもアプリでContent-Lengthヘッダをつけたり、apacheのmod_deflateと組み合わせてContent-Lengthヘッダをつければ(apacheが勝手につける) rangeリクエストにも対応するぽひ。やってみた。
まずはサーバとコンテンツの状態確認。
$ telnet localhost 80 HEAD /hoge.cgi HTTP/1.0 HTTP/1.1 200 OK Date: Sat, 24 Jul 2010 01:28:39 GMT Server: Apache Last-Modified: Tue, 03 Mar 2009 08:31:07 GMT Accept-Ranges: bytes Content-Length: 4000 Connection: close Content-Type: text/html
コンテンツのサイズは4000バイト。Accept-Rangesの結果から、byte単位でrangeリクエストに対応していることがわかる。なので先頭から90bytes取得するリクエスト送ってみた。
$ telent localhost 80 GET /hoge.cgi HTTP/1.0 Range: bytes=0-90 HTTP/1.1 206 Partial Content Date: Sat, 24 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 Connection: close Content-Type: text/html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta
http statusが206、Content-Rangeから4000bytes中、指定した部分だけ取得している。