2

最初、キャッシングはすべてのブラウザーで機能しませんでした。次に、URL に .pdf 拡張子を追加することで、IE (IE8) 以外のすべてのブラウザーで動作するようにしました。その後、サーブレットは呼び出されなくなりました。

次のURLをロードするEMBEDタグを介して、WebページにPDFファイルをインラインで表示します。

http://localhost:7001/app/viewFile.pdf

これは、次のヘッダーを持つ Java サーブレットによって生成されます。

response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);

すべてのブラウザーで PDF を表示するには、Adobe Reader 9.2.0 を使用します。

IEでも動作させるにはどうすればよいですか?たとえば、 IE では 'Cache-Control: no-cache' ヘッダーがrequestに追加されますが、Safari では追加されません。

4

3 に答える 3

1

検討すべきいくつかのアイデア:

  1. cache有効なCache-Controlディレクティブではないと思います。

    public代わりにの値を使用してみてください。またはprivate、それがコンテンツにより適している場合は。詳細については、 RFC 2616を確認してください。

  2. おそらく、複数の Cache-Controlディレクティブを送信していますか?

    FirebugLiveHTTPHeadersなどのツールを使用して、ブラウザーが受信している実際のヘッダーを確認します。彼らがあなたが期待していないものを得ていないことを確認してください。ただし、すでにこれを行っているようです。また、 も送信していないことを確認してくださいPragma: no-cache

  3. Expiresを使用することに加えて、ヘッダーを 設定してみてください Cache-Control

    また、ブラウザーに競合するヘッダーを送信している可能性もCache-ControlありPragma 、IE は Pragma逆の理由でヘッダーを優先することを選択します。

  4. キャッシュを許可するように IE が設定されていることを確認してください。:)

    Control Panel> Internet Options> Temporary Internet Files> Settings> Check for newer versions of stored pages

  5. リクエストへの応答として PDF を送信してみてくださいPOST(フォーム送信経由)。

    IE は、 RFC 2616のこの要件により、応答のヘッダーに関係なくキャッシュを許可してます。キャッシュ可能です。」リクエストへのレスポンスPOSTはキャッシュできないため、IE はそのヘッダーをリクエストに含めるべきではありません。

  6. Content-MD5およびLast-Modifiedヘッダーを一貫した値で送信してみてください(まだ送信されていない場合)。

    これは、PDF のコンテンツが変更されていないことを IE に納得させるのに役立つ場合があります。IE は明らかに頑固なので、この解決策がうまくいくとは思いませんが、言及する価値はあります。

于 2009-12-04T02:10:13.987 に答える
0

この問題を回避する明白な方法の 1 つは、URL 書き換えを使用することです。IE が拡張子 .pdf で動作する場合は、mod_rewrite (Apache) または同様のツールを使用してサーバー側を適切なページにリダイレクトし、クライアントに実際に PDF ファイルを要求していると思わせます。

また、Fiddler などのツールを使用して、クライアントが受信している HTTP ヘッダーを確認します。

また、この古い質問 ( PHP: Force file download and IE, yet again ) を確認してください。ダウンロードを強制しない IE でも同様の問題がありました。

于 2009-12-02T07:40:23.577 に答える