サーバーとしてTomcatを使用し、ブラウザーとしてInternetExplorer6を使用しています。私たちのアプリのウェブページには約75枚の画像があります。SSLを使用しています。すべてのコンテンツの読み込みが非常に遅いようです。IEが画像をキャッシュするようにTomcatを設定するにはどうすればよいですか?
7 に答える
https 経由でページを提供している場合は、含まれているすべての静的または動的リソースを https 経由で提供する必要があります (同じドメインから、または別のドメインから、同じく https 経由で) ブラウザーでのセキュリティ警告を回避します。
安全なチャネルを介して配信されるコンテンツは、デフォルトではほとんどのブラウザでディスクに書き込まれないため、ブラウザのメモリ キャッシュに保存されます。これは、ディスク キャッシュよりもはるかに小さいものです。このキャッシュも、アプリケーションが終了すると消えます。
単一のブラウザ設定内で SSL アセットのキャッシュ可能性を改善するためにできることがあります。まず、すべてのアセットに適切な Expires ヘッダーと Cache-Control ヘッダーがあることを確認してください。tomcat が apache の背後にある場合は、mod_expires を使用してそれらを追加します。これにより、ページ間で画像が変更されたかどうかをブラウザーが確認する必要がなくなります。
<Location /images>
FileEtag none
ExpiresActive on
ExpiresDefault "access plus 1 month"
</Location>
次に、これは MSIE と Apache に固有のもので、ほとんどの apache ssl 構成には次の行が含まれています。
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
すべての MSIE エージェントのキープアライブを無効にします。これは保守的すぎるため、SSL を使用して問題が発生した最新の MSIE ブラウザは 5.x と SP2 より前の 6.0 のパッチが適用されていないバージョンであり、どちらも現在では非常にまれです。以下はより寛大で、MSIE と SSL を使用する場合にキープアライブを無効にしません。
BrowserMatch "MSIE [1-4]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [5-9]" ssl-unclean-shutdown
一部のブラウザーは、SSL コンテンツをキャッシュします。Firefox 2.0 以降は、デフォルトで SSL リソースをディスクにキャッシュしません (プライバシーを強化するため)。Firefox 3+ は、Cache-control:public ヘッダーが表示されない限り、それらをディスクにキャッシュしません。
そのため、Expires: ヘッダーを正しく設定し、Cache-control:public を設定します。例えば
<Files ~ "\.(gif|jpe?g|png|ico|css|js|cab|jar|swf)$">
# Expire these things
# Three days after access time
ExpiresDefault "now plus 3 days"
# This makes Firefox 3 cache images over SSL
Header set Cache-Control public
</Files>
75枚の画像は多いように聞こえます。小さな画像がたくさんある場合は、多くの画像を 1 つにまとめる方法があります。それを行うライブラリを見つけることができるかどうかがわかります。また、画像をgoogle gearsのようなものに強制的にキャッシュすることもできます。
HTTPS接続を介して提供されるコンテンツは、ブラウザーにキャッシュされません。あなたはそれについて多くをすることはできません。
通常、Webサイトの画像はそれほど機密性が高くなく、この理由からHTTP経由で提供されます。
httpsなしで画像を提供する追加のサーバー/サブドメインを追加できますか?
最初の答えは、HTTPS を使用すると何もキャッシュされないという正解です。ただし、Web ページを作成するときは、個々の URL で画像を参照することを検討してください。このようにして、画像が HTTP ソースからのものとして指定でき、(おそらく) ブラウザによってキャッシュされます。