質問者
IISの仮想フォルダにあるファイルを取得するとファイルが0バイトになる

全般的な情報交換
-
ご担当者様
お世話になっております。
武山と申します。
Windows Server 2016にIIS10.0を構成しました。
仮想フォルダにあるファイルを別の端末からwgetコマンドで取得したいのですが、
ファイルの取得はできるものの、なぜか0バイト(空ファイル)になってしまいます。
調査したところ、静的な圧縮のキャッシュディレクトリをウィルススキャン対象になっていると、
0バイトのファイルが返されることがあるという記事を見つけました。
こちらに倣い対象ディレクトリをスキャン対象から除外しましたが、解消されませんでした。
ファイルを正常に取得できないと後続の処理に大きく影響してしまうため、
早急に解決したいと思っております。
解決方法をご教示ください。
以上、よろしくお願いいたします。
2020年9月1日 9:07
すべての返信
-
IIS カテゴリーに投稿されていますが、サーバー起因の現象なのか、クライアント起因の現象なのか切り分けできていますか?
別のクライアントから試す、wget ではなくブラウザーでダウンロードしてみる、ネットワーク パケットキャプチャを採取してみる、などの切り分けが考えられますが。
Hebikuzure aka Murachi Akira
- 編集済み Hebikuzure aka Murachi AkiraMVP 2020年9月1日 11:19
2020年9月1日 11:18 -
HTTPサーバ上でnetsh trace start capture=yesを実行してパケットキャプチャを取得してみました。
Microsoft Network Monitorでキャプチャ内容を確認し、抜粋したものが以下になります。
ClientからServerに向かってwgetコマンドをSpiderモードで実行しました。
素人なのでまったく詳しくないのですが、これらの情報から糸口は見つけられそうでしょうか。
↓wgetコマンド実行結果
---request begin---
HEAD /point/term.20200831 HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Authorization: Basic XXXXXX
Host: HTTP Server
Connection: Keep-Alive
---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Content-Length: 0
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Wed, 02 Sep 2020 05:18:08 GMT
Connection: keep-alive
---response end---
HTTP/1.1 200 OK
Content-Length: 0
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Wed, 02 Sep 2020 05:18:08 GMT
Connection: keep-alive
Registered socket 548 for persistent reuse.
Length: 0
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.↓パケットキャプチャ
HTTP Server Client TCP TCP: [Bad CheckSum]Flags=...A..S., SrcPort=HTTP(80), DstPort=52870, PayloadLen=0, Seq=2363253859, Ack=3207955921, Win=8192 ( Negotiated scale factor 0x8 ) = 819
Client HTTP Server TCP TCP:Flags=...A...., SrcPort=52870, DstPort=HTTP(80), PayloadLen=0, Seq=3207955921, Ack=2363253860, Win=515
Client HTTP Server HTTP HTTP:Request, HEAD /point/term.20200831 , Using Basic Authorization
HTTP Server Client TCP TCP: [Bad CheckSum]Flags=...A...., SrcPort=HTTP(80), DstPort=52870, PayloadLen=0, Seq=2363253860, Ack=3207956128, Win=1026 (scale factor 0x0) = 1026
HTTP Server Client HTTP HTTP:Response, HTTP/1.1, Status: Ok, URL: /point/term.20200831
Client HTTP Server TCP TCP:Flags=...A.R.., SrcPort=52870, DstPort=HTTP(80), PayloadLen=0, Seq=3207956128, Ack=2363254010, Win=0
2020年9月2日 5:34 -
以下のコマンドを実行しています。
wget http://HTTP Server/point/term.20200831 --http-user=user --http-password=password -S --auth-no-challenge -d --spider
spiderオプションを抜いたらGETリクエストが出ました。
以下はSpiderオプションを指定しなかったときのキャプチャになります。
HTTP Server Client TCP TCP: [Bad CheckSum]Flags=...A..S., SrcPort=HTTP(80), DstPort=51037, PayloadLen=0, Seq=2379661978, Ack=2928167956, Win=8192 ( Negotiated scale factor 0x8 ) = 8192
Client HTTP Server TCP TCP:Flags=...A...., SrcPort=51037, DstPort=HTTP(80), PayloadLen=0, Seq=2928167956, Ack=2379661979, Win=515
Client HTTP Server HTTP HTTP:Request, GET /point/term.20200831 , Using Basic Authorization
HTTP Server Client HTTP HTTP:Response, HTTP/1.1, Status: Ok, URL: /point/term.20200831
Client HTTP Server TCP TCP:Flags=...A.R.., SrcPort=51037, DstPort=HTTP(80), PayloadLen=0, Seq=2928168162, Ack=2379662129, Win=0
2020年9月2日 5:58 -
Fiddler を使って、基本認証がかかかっているなら認証用のヘッダ Authorization: Basic xxx... を要求ヘッダに含め(xxx... の部分は[ユーザ名]と[パスワード]をコロン ":" でつなぎ Base64 でエンコードしたもの)て GET 要求をかけ、要求ヘッダと応答ヘッダ・ボディ部がどうなっているか調べることはできませんか? その中にヒントがありそうな気がします。
> 仮想フォルダにあるファイルを別の端末からwgetコマンドで取得したいのですが、
そもそもサーバー側はどうなっているのですか?
「仮想フォルダ」とだけ言われても IIS にどのように設定されているかなどサーバー側の構成・設定が分かりません。基本認証がかかっているように見えますがそのあたりの情報もないし。取得したい「ファイル」が何かも分かりません。
閲覧者・回答者が自分の環境で全く同じ構成・設定を IIS に行って、同種のファイルをフォルダに置いて、実際に取得して試してみることができる程度の情報が提供できませんか?2020年9月3日 0:36