あらいです。 先日、apache2 がアップデートされましたが、どうもその辺りから動作がお かしいようです。 何かというと、VLC で URL 指定でアクセスしたとき、時間スライダーが使え ないのです。というか、途中に飛ぼうとするととんでもない時間がかかります。 その間パケットが飛び続けているようです。 例によって私が変なことをしているからかとも思いましたが、調べてみると そうでもないような気がしてきました。 まず、LogLevel を debug にしてみたら、こういうのが出ていました。 [Fri Sep 23 11:34:40 2011] [debug] byterange_filter.c(518): [client 192.168.0.3] Sum of ranges not smaller than file, ignoring. そこで、httpd-2.2.14/modules/http/byterange_filter.c を見てみたところ、 sum_lengths のチェックがおかしいように思えたのです。 なお、ソースは、apache2-2.2.14-13vl5 のものです。 実際に飛んでいたリクエストを見ると、こうなっていました。 Range: bytes=0-\r\n "0-" だと、start = 0, end = clength - 1 になり、sum_lengths は clength と同じ、つまり全部になると思うのですが、このソースのチェックで はそれを弾いています。 とりあえず、こうしたら問題なく使えるようになりました。 --- httpd-2.2.14/modules/http/byterange_filter.c.org 2011-09-23 12:28:46.822909007 +0900 +++ httpd-2.2.14/modules/http/byterange_filter.c 2011-09-23 12:20:38.363596958 +0900 @@ -514,7 +514,7 @@ /* If all ranges are unsatisfiable, we should return 416 */ return -1; } - if (sum_lengths >= clength) { + if (sum_lengths > clength) { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "Sum of ranges not smaller than file, ignoring."); return 0; ただ、このメッセージによると、"not smaller than file" のときにエラー とするようになっているようです。つまり、メッセージとチェックの仕方はちゃ んと整合性が取れています。 HTTP_PARTIAL_CONTENT の仕様の確認まではしていませんが、これはどちらが 正しいのでしょうか。 RFC 2616 14.35.1 では、こうなっています。 If the last-byte-pos value is absent, or if the value is greater than or equal to the current length of the entity-body, last-byte-pos is taken to be equal to one less than the current length of the entity- body in bytes. last-byte-pos が length - 1 ということは、サイズは length まで、と読 めるような気がするのですが。 _______________________________________________ vine-users mailing list vine-users@xxxxxxxxxxxxxxxxxxxx http://listserv.linux.or.jp/mailman/listinfo/vine-users