- PR -

プロキシサーバを経由してPDFファイルをダウンロードするとファイルが壊れる

投稿者投稿内容
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-10 17:18
引用:

testさんの書き込み (2008-06-10 16:43) より:
んー、そうなるとプロキシサーバ側でHTTP1.0で通信してるんですかね。
プロキシサーバ自身のレスポンスヘッダの内容は見られますか?


プロキシサーバのレスポンスヘッダは見られませんでしたが,
WWWプロキシはHTTP1.0準拠とうたっていました。
ということは,プロキシから先はHTTP1.0で通信しているようです。

そこで疑問なのですが,同じPCからFireFoxでは正常にPDFファイルを
取得できるのに,IE6.0では取得できないのでしょうか。
もっとも,全てはここから始まったんですが…。
test
会議室デビュー日: 2008/04/01
投稿数: 9
お住まい・勤務地: 古の都
投稿日時: 2008-06-10 17:33
んでは再度確認をば。
Firefox等で確認されてるときは、IEで正常に取得できないのと同じプロキシを経由していますか?

#同じIE6でもプロキシ経由したらダメってことはそこが原因としか私には思いつかない
##細かいようですがFireFoxではなくてFirefoxですね
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-10 17:46
引用:

testさんの書き込み (2008-06-10 17:33) より:
んでは再度確認をば。
Firefox等で確認されてるときは、IEで正常に取得できないのと同じプロキシを経由していますか?


はい,通信を行うときの設定は全く同じになっています。
それでも結果が違うって???

>#同じIE6でもプロキシ経由したらダメってことはそこが原因としか私には思いつかない
>
#私も同様です。
#やっぱり最終手段かな?

>##細かいようですがFireFoxではなくてFirefoxですね
>
#失礼しました。
#そうですね,今見ているタイトルバーにもそう書いてありました。(^^ゞ
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-06-10 23:49
引用:

バトーさんの書き込み (2008-06-10 12:26) より:
wRes.write(wPdfPage.toByteArray());


あまり聞かない現象ですが、ひょっとしたらと思うのですが、Web サーバー内でファイルを読み込む段階ですでに壊しているということはないですか?
wPdfPage はどうやって構築しているのでしょうか?試しに、ファイルから読まずに、テスト用の 00 01 02 03 04 … のような単純な内容で response を出力してみてはどうでしょうか。また、どのように壊れるのでしょうか?壊れたバイトデーターはどんな値になっているのでしょうか?
(テストデーターは 00 00 00 01 00 02 00 03 00 04 … のようにできるだけユニークなほうが良いかもしれませんね。)
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2008-06-11 08:56
パケットキャプチャして比較してみれば?
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-11 10:05
返信が遅れて失礼しました。
引用:

unibonさんの書き込み (2008-06-10 23:49) より:
引用:

バトーさんの書き込み (2008-06-10 12:26) より:
wRes.write(wPdfPage.toByteArray());


あまり聞かない現象ですが、ひょっとしたらと思うのですが、Web サーバー内でファイルを読み込む段階ですでに壊しているということはないですか?
wPdfPage はどうやって構築しているのでしょうか?試しに、ファイルから読まずに、テスト用の 00 01 02 03 04 … のような単純な内容で response を出力してみてはどうでしょうか。また、どのように壊れるのでしょうか?壊れたバイトデーターはどんな値になっているのでしょうか?
(テストデーターは 00 00 00 01 00 02 00 03 00 04 … のようにできるだけユニークなほうが良いかもしれませんね。)


そうですよね,ググッてみましたが同様の現象は見つけられませんでした。
公開してから1年以上経ってから見つかった障害です。
しかも,障害が確認できるのは2カ所だけ…。内一カ所は私のマシンです。

あ,愚痴はこのくらいにして,ご質問の回答に戻ります。
wPdfPageはAspose.Pdf.Kitを使用してPDFファイルを作成していますが,そのクラスです。
初めはサーブレットのバグも考えたんです。
が,同じHTTPリクエストでFirefoxでは正常動作,IE6.0なら異常動作っていうのも,
プログラムの動作として考えると…。
また,開発環境では再現しなくて,アプリケーションを公開しているサーバのみでしか
動作確認ができない状態です。
更に,既にユーザに使われているので,あまり極端なテストプログラムに差し替えるのも
難しい状態です。

引用:

ひろ@yaさんの書き込み (2008-06-11 08:56) より:
パケットキャプチャして比較してみれば?


そうですね。
ツールを探してやってみます。

プロキシを経由する/しないでサーバからのレスポンスヘッダがHTTP1.0とHTTP1.1と
変わりますが,ダウンロードするデータに違いが出てしまうものなんでしょうか?
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2008-06-11 10:34
こんにちは、3〜4年前ですが似たような現象に合ったことがあります。
その時は散々調べて、結局アドインの問題だったような記憶です。

Cns_minだったかな?JWORDを入れたときに入るBHO型のプラグインで、
その時はこれをアンインストールしたら正常に動作しました。

IE6無印では正常に動いてIE6のSP?を入れた端末で動かないという現象だった
と思います。

アドオンを全部無効にした状態でも現象はでますか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-06-11 11:01
引用:

バトーさんの書き込み (2008-06-11 10:05) より:
wPdfPageはAspose.Pdf.Kitを使用してPDFファイルを作成していますが,そのクラスです。
初めはサーブレットのバグも考えたんです。
が,同じHTTPリクエストでFirefoxでは正常動作,IE6.0なら異常動作っていうのも,
プログラムの動作として考えると…。


引用:

バトーさんの書き込み (2008-06-10 12:26) より:
wRes.write(wPdfPage.toByteArray());
wPdfPage.close();


そのツールは知らないのですが、close する前に size や toByteArray を取得して大丈夫なのかな?と疑問に思いました。
(仕様次第であり、たとえば似たような名前のメソッドを持つ Java の java.io.ByteArrayOutputStream だったら close してもしなくても良いので、一概には言えませんが。)

引用:

バトーさんの書き込み (2008-06-11 10:05) より:
また,開発環境では再現しなくて,アプリケーションを公開しているサーバのみでしか
動作確認ができない状態です。
更に,既にユーザに使われているので,あまり極端なテストプログラムに差し替えるのも
難しい状態です。


私だったら wPdfPage の内容を Web サーバー内のファイルとして、逐一ログファイルとして記録していきます(ミリ秒単位の時刻をファイル名とするなど)。バグが発生したら、そのログファイルがすでに壊れているかどうかを遡って調べます。これだと、追加だけで済むので楽です。
プロキシーを通すかどうかで、バッファーのチャンクのリード・ライトのバイト数が違ったり、マルチスレッドの動きが違ってバグの出方が異なるなどが考えられます。

以上、あくまでも、wPdfPage を疑った場合の話なので、ネットワークやクライアント側の疑いは別途残ります。

スキルアップ/キャリアアップ(JOB@IT)