- PR -

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

投稿者投稿内容
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-10 12:26
会議室の皆さま,こん○○は。

サーブレットでユーザからの指定に応じたPDFファイルを作成し,それをユーザに返す
WEBアプリケーションを公開しております。
しかし,一つ大きな問題が解決できていません。
それは,「プロキシサーバを経由するとPDFファイルが壊れる」というものです。
ただ,各プロバイダのプロキシを経由しても障害は発生しません。
特定のプロキシサーバを経由するとIEでのみ障害が発生します。
同じ設定でFireFox,Operaでは障害は発生しません。
(WinGate4.4で発生)
また,HTTPヘッダのダンプも確認してみましたが,
これといった違いはありませんでした。
さらに,IEでもプロキシを経由しないと障害は発生しません。
(FireFox,Operaでは正常)
IE6.0+プロキシサーバの組み合わせの時だけ障害が発生している状態です。
どなたか,障害の発生原因か対応方法をご存じないでしょうか?

(ユーザにIE以外を使用してもらうのも最終手段としては考えていますが,
 あくまでも最終手段としたいのです。)

サーバは以下の環境です。
 Windows2003Server+IIS6.0+TOMCAT5.5.20
 Redirecterはjk-1.2.15

クライアントで使用するブラウザは
 IE6.0,FireFox2.0です。
 IEにはWindowsUpdateで適用可能なパッチが全て適用されている前提です。

また,サーブレットからPDFファイルを出力する部分のJavaソースです。
wFileName += ".pdf";
wFileName = new String(wFileName.getBytes("Shift_JIS"), "8859_1");
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=\\"" + wFileName + "\\"");
response.setContentLength((int) wPdfPage.size());
response.setHeader("Expires", "0");
response.setHeader("Cache-Control","must-revalidate, post-check=0,pre-check=0");
response.setHeader("Pragma", "private");
response.flushBuffer();
ServletOutputStream wRes = response.getOutputStream();
wRes.write(wPdfPage.toByteArray());
wPdfPage.close();
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-06-10 14:20
「ファイルが壊れる」というのは具体的にどういう状況でしょうか。
例えば直接ファイルとしてダウンロードして、バイナリの比較を行うと、
バイナリそのものに違いがあるということでしょうか。
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-10 14:43
「ファイルが壊れる」では意味が通らないですね。
失礼しました。

同一の結果になるようにプロキシサーバ経由で作成した場合と
プロキシサーバを経由しないで作成したPDFファイルを
バイナリコンペアすると内容に違いがあります。
また,プロキシサーバ経由のPDFファイルをAdobeReaderで
表示しようとすると,以下のエラーメッセージが表示されます。
「埋め込みフォント「IBMVBU+MS-Mincho」を抽出できません。一部の文字を正しく表
 示できない場合や,印刷できない場合があります。」
フォント名の前にある「IBMVBU」は毎回違う値になります。

PDFファイルはサーブレット側で文字列の追加や複数PDFファイル合成などの
処理を行っています。(Aspose.Pdf.kitを使用しています)

他に必要な情報はありますか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-06-10 15:31
バイナリコンペアの結果って明らかに違う感じでしょうか。
一部だけなのでしょうか。

プロキシを使用した場合と使用していない場合で、
レスポンスヘッダに違いはあるでしょうか。

ブラウザによるレスポンスヘッダの解釈の問題なのかなと思いましたが、
WinGateの知識がないので、そこらへんは識者の方よろしくお願いします。
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-10 16:03
かつのりさん,ありがとうございます。

>バイナリコンペアの結果って明らかに違う感じでしょうか。
>一部だけなのでしょうか。
途中までは同じです。
ファイルによって値が変わる位置が変わりますが…。

レスポンスヘッダはプロキシ経由の時は
 HTTP/1.0 200 OK
 Date: Tue, 10 Jun 2008 06:44:00 GMT
 Server: Microsoft-IIS/6.0
 X-Powered-By: ASP.NET
 Content-disposition: inline; filename="hoge.pdf"
 Content-Type: application/pdf
で,プロキシを経由しないときは
 HTTP/1.1 200 OK
 Connection: close
 Date: Tue, 10 Jun 2008 06:56:00 GMT
 Server: Microsoft-IIS/6.0
 X-Powered-By: ASP.NET
 Content-disposition: inline; filename="hoge.pdf"
 Content-Type: application/pdf
でした。
(違っている部分は太字で,片方のみに存在するレスポンスは斜体にしました。)

う〜ん,ますます違いがわからなくなってきました。
test
会議室デビュー日: 2008/04/01
投稿数: 9
お住まい・勤務地: 古の都
投稿日時: 2008-06-10 16:10
引用:

バトーさんの書き込み (2008-06-10 16:03) より:
レスポンスヘッダはプロキシ経由の時は
 HTTP/1.0 200 OK
で,プロキシを経由しないときは
 HTTP/1.1 200 OK
 Connection: close


プロキシ接続でHTTP1.1を使用するにチェックが入ってないから?
バトー
会議室デビュー日: 2008/06/10
投稿数: 13
お住まい・勤務地: 埼玉
投稿日時: 2008-06-10 16:20
引用:

testさんの書き込み (2008-06-10 16:10) より:
引用:

バトーさんの書き込み (2008-06-10 16:03) より:
レスポンスヘッダはプロキシ経由の時は
 HTTP/1.0 200 OK
で,プロキシを経由しないときは
 HTTP/1.1 200 OK
 Connection: close


プロキシ接続でHTTP1.1を使用するにチェックが入ってないから?


チェックは入っています。
もっとも,入っていても,いなくてもレスポンスに違いは無いんですが,
そちらの方が問題ですか?

[ メッセージ編集済み 編集者: バトー 編集日時 2008-06-10 16:21 ]
test
会議室デビュー日: 2008/04/01
投稿数: 9
お住まい・勤務地: 古の都
投稿日時: 2008-06-10 16:43
んー、そうなるとプロキシサーバ側でHTTP1.0で通信してるんですかね。
プロキシサーバ自身のレスポンスヘッダの内容は見られますか?

#ここで出てる情報だとそこしか原因が思いつかないので。

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