HTTPS 経由で提供される画像などのコンテンツをクライアント側でキャッシュするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/72358

  •  09-06-2019
  •  | 
  •  

質問

サーバーとして Tomcat を使用し、ブラウザとして Internet Explorer 6 を使用しています。私たちのアプリの Web ページには約 75 枚の画像があります。SSLを使用しております。すべてのコンテンツを読み込むのが非常に遅いようです。IE がイメージをキャッシュするように Tomcat を設定するにはどうすればよいですか?

役に立ちましたか?

解決

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 ヘッダーが表示されない限り、それらはディスクにキャッシュされません。

そこで有効期限を設定します。ヘッダーが正しく、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 個の画像の多くがアイコンまたは各ページに表示される画像である場合、CSS スプライトを使用して HTTP リクエストの数を大幅に減らし、ページの読み込みを速くすることができます。

http://www.alistapart.com/articles/sprites/

75枚の画像はかなり多いように思えます。小さな画像がたくさんある場合は、多数の画像を 1 つにバンドルする方法があります。それを行うライブラリが見つかるかどうかを確認してください。また、おそらく次のような場所に画像を強制的にキャッシュすることもできます グーグルの歯車.

HTTPS 接続経由で提供されるコンテンツ 決してキャッシュされない ブラウザで。それについてはあまりできることがありません。

通常、Web サイト内の画像はそれほど機密性が高くなく、まさにこの理由から HTTP 経由で提供されます。

最初の答えは、HTTPS を使用する場合には何もキャッシュされないということで正解です。ただし、Web ページを作成するときは、個々の URL で画像を参照することを検討することもできます。この方法では、画像を HTTP ソースからのものとして指定でき、それらはブラウザーによってキャッシュされる可能性があります。

https なしで画像を提供するサーバー/サブドメインを追加できるでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top