2011年9月23日

[vine-users:081455] apache2 HTTP_PARTIAL_CONTENT

あらいです。

 先日、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@xxxxx
http://listserv.linux.or.jp/mailman/listinfo/vine-users


投稿者 xml-rpc : 2011年9月23日 13:42
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106479
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。