title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM WebDAV サーバ
小さくも大きくも閉じたりもしません
14/07/26 04:07 / pHTTPServer

photo


MJRecorder を開発中にできた副産物の小型httpサーバへ WebDAV サーバ機能を実装して、それを MJRecorder にフィードバックするシナジー?で嵌っていた今日この頃です。

あ、アプリケーションタイトルにもありますように pHTTPServer って名前になっています。

ようやく、Windows7 などの Windows OS に標準搭載されている WebDAV クライアント(以下 MiniRedir)からまともにアクセスできるようになりました。

その他にテストしていた Windows 用や iOS 用の WebDAV クライアントは元からサクサク動いていたのですが、なぜか Windows の MiniRedir だけまともに動いていなかったのです。

これがまた検索すると色々出てくるんですよ。

1)Windows XP 時代の WebDAV はまともだった。
2)Windows Vista 以降に SSL/TLS が必須になったのでレジストリの変更をしなければならない。
3)WebDAV にファイルをアップロードしようとするとファイルサイズ制限がある。
4)ファイルサイズ制限以下なのに、なぜか「ファイル xxxxx は大きすぎて、対象のファイルシステムに入りません」とエラー出す。

案の定ざっくりとこの辺りの洗礼を受けて2,3日オオはまりしていたのです(^-^;

んで、この辺りの回答例が

「他の WebDAV クライアントを使おう」とかでして、ユーザー側(クライアント側)の立場であれば「そうそう、そうしようよ」と思うのですが・・・
(余り国内サイトで有益な情報がなかったので英語サイトも見て廻っていたのですが、やっぱり同じように別のクライアント使おう!な回答ばかりでした)

いかんせんサーバー側ですので、そうはいきません。
悔しいことに標準WebDAV クライアントでも対象が IIS8 だとまともに動くんですよね。

Windows7 の IIS7.5 では同様のエラーが出て使い物にならなかったので、しょうがなしに Windows 2012 の IIS8 に WebDAV を追加インストールしましたよ。確認の為だけに。

ちなみに、2のようにクライアントには SSL/TLS 必須!となって変更するにはレジストリの変更が必要なのに、IIS 側の WebDAV 設定には、SSL/TLS を切れるようになっているんですよね。

閑話休題

Windows7 等の MiniRedir について、いくつか気がついた点として

1)遅いのはなぜ?

a)自動構成を確認する設定になっていると、毎回設定を確認しにいくので遅くなります。off にすると接続時は早くなります。

b)勝手に色々とアクセスするからです。

pHTTPServer をデバッグモードにすると、いわゆるトレースログの出力(通信内容を全てファイルに書き出す)をするようになるんですが、見ていると、まぁあちこちにアクセスします。

例えばですね、仮想フォルダを作成して、/output にのみ WebDAV を許可してもルートを見に行くんですよ。
(当然はじかれます)
そして、ルートから favicon.ico を取得しようとします。
ついでに desktop.ini や、SwDRM.dll(ShockWave DRM っぽいですね)なども取得しようとします。(file not found になります)
更にキャッシュをしたいのか、定期的に、HEAD の取得をしたりもします。

ここらは設計思想の違いからくるものだと思いますが、 MiniRedir は、リダイレクターなので、その上にエクスプローラがいる訳ですよ。

FTP ライクな UI の場合は、そのフォルダにアクセスした時点でサーバー側から送られて来る情報を元に構成するのですが・・・

エクスプローラ「あ、これフォルダだよね?じゃー desktop.ini があるか確認するよ」
MiniRedir「OK、ネットワークの先にあるけど、エクスプローラには普通のフォルダに見せかけているから、取ってきて渡さないとね」

みたいな感じになっているのだと思います。
LAN内ならいいんですが、テザリング中にこれやられると遅くて死んでしまいそうです。

2)なんでアップロードできなかったりフリーズしたりするの?

最新の IIS や Apache2 を利用している場合は大丈夫だと思いますが、相手が少々古いサーバですと、アップロードしようとして「ファイルがでっかすぎるよ」とかエラーが出たりすることがあるんですが、これはちょっと気が付かない原因でした。

まず「ファイルが大きすぎます」と出る奴なんですが、 MiniRedir がデタラメなエラーを出しています(笑)

これ本当は、サーバ側は Class2 の lock に対してエラーを出しているんですが(もっと厳密に言うと、lock の XML property の解析に失敗している)なぜか、おかしな解釈をしてエラーを出しています。

IIS8 は MiniRedir が解釈できる XML property を返信するので正常に動作するんですが、そうでないと、このエラーを出すようです。
(最初ローカライズミスかと思っていたのですが、英語サイトでも同様に too large for the destination file system みたいに出るようなので、リソースID のミスか、単なるバグかのどっちかですね)

で、この解析なんですが、なぜか同じ書式で Propfind (WebDAV サーバー側のコレクションの情報を取得するコマンド)ではエラーにならず、lock (WebDAV サーバ側のコレクションをロックするコマンド)ではエラーになって、変なエラーを出すんです。

流れ的に Class1 を実装してから Class2 の実装を行っていたので「Propfind と同じ書式だよなぁ?なんで、lock ではエラーになるんだ?」となった訳です・・・

あと、フリーズするのは、 MiniRedir 側が「Class2 までは普通対応しているよねー、してないサーバなんて無いんじゃない?」と思ったかどうかはわかりませんが、そういう感じで決め打ちで lock コマンド投げてきて、サーバ側が「そんなコマンド対応してませんよ」とエラーを出しても「そんなこたーない。応答を待つよ」とタイムアウトになるまで延々と待っているからです。

確かに今時 Class1 しか対応していないサーバなんてうちみたいに自作しようなんて奇特な人のサーバしか無いので、殆ど問題にはならない訳ですが(笑)

作っている側からすると「なんでフリーズするんだー」ってなる訳です。

・・・・・・なんか長々と書いていますが、WebDAV サーバを作ろうって人にしかわからん話ですね(^-^;

そもそも今更 Webサーバを0から作ろうって人も余り居ない訳ですが・・・

とりあえず苦労は報われた?ので、MJRecorder にようやく組み込むことができます。

[更新日付:2014/08/23 00:29:14]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+e5a1602918a7c6883d1b36a87ad743646da06ba6]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+e5a1602918a7c6883d1b36a87ad743646da06ba6]

記事へのコメント

名前 : H.Matsuda (2014/07/29 11:01:20)

noppo 様

ちなみに WevDAV クライアントは何を利用されていますか?

名前 : noppo (2014/07/28 21:26:43)

こんにちは。

実装お疲れ様でした。

class2のlockまで実装することになったようですね。

大変な注文を付けたようですが、それがMJRecorderへのヒントにもなってよかったと思います。

pHTTPServerも楽しみにしています^^;

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.