vine-users ML アーカイブ



[vine-users:081455] apache2 HTTP_PARTIAL_CONTENT

  • From: ARAI Shun-ichi <hermes@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:081455] apache2 HTTP_PARTIAL_CONTENT
  • Date: Fri, 23 Sep 2011 13:42:58 +0900 (JST)
あらいです。

 先日、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