キャッシュコントロールのハードルールとファーストルールは何ですか?


15

告白:私が管理しているサイトには、主にサーバーのデフォルト構成に基づいてキャッシュ制御に関するさまざまなルールがあり、ページ速度Y-Slow Firefoxプラグインの推奨事項とGoogleのSpeed Tracerのネットワークリソースビューに基づいています。Cache-Controlは、何をするかによってプライベート/パブリックに設定されます。ETagの/ Last-Modifiedヘッダーは、Y-Slowが何か問題があることを示唆し、Amazonのファイルを手動でgzipするときにVary-Accept-Encodingが必要な場合にのみ変更されますCloudFront。

さまざまなオプションとそのオプションに関する資料を読むと、矛盾する情報、壊れたプロキシのルール、カーゴカルトの構成があるようです。上記の分析ツールによって提供される公式情報は、統一された戦略としてではなく、各トピックを個別に処理するため、まったくアクセスできません(技術の相互参照はありません)。

たとえば、速度解析ツールがETagを使用するサイトを、キャッシングを支援することを目的としている場合、ETagを使用しないサイトと同じと評価することは意味がないようです。

プラットフォームに依存しないキャッシュ制御戦略の厳格なルールは何ですか?

編集:

リンク経由ジェフ・アトウッドの記事はすばらしい深さでのキャッシングについて説明します。

記録のために、ここには厳しい規則があります:

ファイルがGZIPなどを使用して圧縮されている場合 -プロキシは「cache-control:private」を使用します。プロキシは、それをサポートしていないクライアントに圧縮バージョンを返す場合があります(ブラウザキャッシュはこのようにマークされたファイルを保持します)。また、「Vary:Accept-Encoding」を含めて、圧縮可能であると言うことを忘れないでください。

Last-ModifiedをETagと組み合わせて使用-ベルトとブレースの使用は両方のバリデータを提供しますが、ETagは変更時間だけではなくファイルの内容に基づいており、両方がすべてのベースをカバーします。注: AOLのPageTestには、何らかの理由でETagsに対する単純なアプローチがあります。同じコンテンツをホストするために複数のサーバーでApacheを使用している場合、実際に同じライブファイルシステムを使用していない限り、ETagsから暗黙的に宣言されたinodeをFileETagディレクティブから除外して削除します。

可能な限り「cache-control:public」を使用します -これは、ページの残りがHTTP認証などを必要とする場合でも、プロキシサーバー(およびブラウザーキャッシュ)がコンテンツを返すことを意味します。

回答:


8

まず、サーバーファーム/クラスターを使用している場合を除き、Yahooが言うようにETagを削除しないでください。同じファイルが変更されていないときに常に同じETagを返す限り、それは非常に便利なディレクティブです。

他のヘッダーに関しては、YahooのベストプラクティスExpiresではCache-Control、動的ファイルに使用する静的ファイルの将来のヘッダーを設定することを推奨しています。ただしCache-control、静的コンテンツにはまったく問題ありません(それらの間にほとんど違いはありません)。

キャッシュされた静的ファイルを変更する場合、ファイル名を変更するか、末尾に一意のパラメーターを追加する必要がありますexample.com/styles.css?v=2。ただし、以下のコメントに記載されているように、実際のファイル名を変更することをお勧めします。

ちなみに、YSlowルールを好みに合わせて編集し、Etagルールを削除して、独自のドメインをCDNとして追加できます。この記事は、Yahooの問題はあなたの問題ではありません。


ETagは、Y-Slowのinode(FSごとに信頼性が低い)を含むデフォルトの代わりに「FileETag MTime Size」を実行することにより、Apacheで意味をなしました。ただし、Yahooのベストプラクティスに関する推奨事項は、Page Speedの推奨事項と比較すると、少し混乱します。たとえば、動的ページでのみCache-Controlを使用することをお勧めします(推奨)
Metalshark

プロキシのためにそのアドバイスをどうするかを知ることは困難です。Googleは単に「いくつかのパブリックプロキシにはバグがあります...」と言っていますが、これがどれほど普及しているかはわかりません。ヘッダを設定するためのアドバイスは、それをしないVary: Accept-Encoding、の下部を参照code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat

クエリパラメータを追加すると、一部のブラウザでそのファイルのキャッシュが完全に無効になります。あなたは次のように、代わりに、「ファイル名を変更する」アプローチで行くこともできますので、example.com/style_v2.css
エフゲニー

@Evgeny:どのブラウザーですか?以前にこれを聞いたことがありますが、実際にファイルをキャッシュしないブラウザは見たことがありません(特に正しいヘッダーがある場合)。
DisgruntledGoat

実際、@ DisgruntledGoatは、掘り下げた後、実際にユーザーエージェントがクエリ文字列を持つアセットをキャッシュしてはならないと言っている仕様の一部であるhttp / 1.0時代の遺物のようです。一方、code.google.com / speed / page-speed / docs / caching.htmlは、アセットをキャッシュしないのはプロキシ(squid <3.0)であるため、キャッシュの無効化にクエリ文字列を使用することは推奨されていません。
エフゲニー

0

キャッシュを使用するようにリソースのリクエストヘッダーを変更するほとんどの人にとって、ebableキャッシングの方法は、Webホスト/サーバー上の.htaccessというファイルにコードを追加することです。

これは、ウェブホスト上のファイルマネージャー(またはファイルを追加またはアップロードする場所)に移動することを意味します。

.htaccessファイルは、サイトの多くの重要な要素を制御します。.htaccessファイルに慣れていない場合は、.htaccessの使用に関する記事を読んで、変更する前にその方法を知ってください。

以下のコードは、ブラウザに何をキャッシュし、どのくらいの期間「記憶」するかを指示します。.htaccessファイルの先頭に追加する必要があります。

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

.htaccessファイルを保存してから、Webページを更新します。

ソース:https :
//varvy.com/pagespeed/leverage-browser-caching.html


ExpiresByType私が見るディレクティブのほぼすべての例にはmime-typeが含まれていtext/x-javascriptます-サーバーは本当にこのコンテンツタイプで応答していますか?!(ブラインドコピー/貼り付けIMOの例。)
MrWhite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.