11

javascript と css のみがキャッシュされていないように見えますが、画像はキャッシュされています。

Firebug を使用していますが、ページを更新すると、Firebugで js/cssに対する 200 の HTTP 応答が多数あることに気付きますが、すべての画像に対して304 HTTP コード(コンテンツは変更されていません) を受信して​​います。したがって、私の JS と CSS はキャッシュされていないようです。

また、YSlow を使用して JS/CSS コンテンツがキャッシュされない問題を特定すると、次のように通知されます。

ETag が正しく構成されていないコンポーネントが 4 つあります

以下にリストされているのは私の .htaccess ファイルです

Options -Indexes
Options +FollowSymLinks  

# Enable ETag
FileETag MTime Size

# Set expiration header
ExpiresActive on
ExpiresDefault "access plus 1 week"

# Compress some text file types
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml application/x-javascript text/javascript application/javascript application/json

# Deactivate compression for buggy browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Set header information for proxies
Header append Vary User-Agent

.htaccess アクセス ファイルが CSS や JavaScript のキャッシュを妨げている原因について何か考えはありますか?

4

6 に答える 6

7

ETagを無効にすることを検討してください。

次の設定を検討してください。

Header unset ETag
FileETag None
Header set Cache-Control "max-age=2678400"

最初の 2 つのルールは ETag を完全に無効にするため、ブラウザは Cache-Control ヘッダーをリッスンする必要があります。最後のルールは、ファイルを 2678400 秒、つまり 1 か月間キャッシュするようブラウザに指示します。設定を微調整して、最も適したものにします。そして、静的ファイルを含むディレクトリにこの構成を適用します(たとえば、そのディレクトリに.htaccessファイルを配置することにより)

オプション。静的コンテンツを提供するために複数のサーバーを使用している場合、および/またはそれらのサーバーが報告する最終更新時刻がわからない場合は、次の使用を検討してください。

Header unset Last-Modified

Last-Modified ヘッダーを提供しないように Apache に指示するため、ブラウザは Cache-Control max-age ヘッダーのみをリッスンできます。

この設定は、トラフィックの多い多くの Web サイトで私自身が使用しており、ETag ヘッダーと Last-Modified ヘッダーを無効にすることで、トラフィックが以前の 5 分の 1 に減少したことは確かです。特に Internet Explorer は、これらの設定に非常に敏感です。

注意: Last-Modified を無効にすると、ブラウザーは 304 Content Not Modified リクエストを要求しなくなります。私の経験では、Web サーバーが処理する要求が少なくなり、ブラウザーが提供する Cache-Control 設定により依存するため、これは肯定的です。しかし、それはあなたに合うかもしれないし、合わないかもしれません。一部のブラウザーは、「Last-Modified」ヘッダーを提供すると、数分ごとにアセットを検証しようとします。そのため、このヘッダーの使用を完全に無効にすることをお勧めします。

ああ、キャッシュについてよくわからない場合は。http://www.redbot.org/を使用してアセットをテストすると、ヘッダーがブラウザーにとって何を意味するか、および使用するさまざまなキャッシュ制御設定を解釈する方法がすぐにわかります。

于 2011-12-13T22:39:08.097 に答える
2

このYSlowエラーメッセージは非常に誤解を招く恐れがあります。

YSlowは、実際にはETagを使用していると不平を言っています

YSlowはブラウザで実行されます。ETagが正しく設定されているかどうかを知る方法はありません。経験則として、マルチサーバー環境で適切に構成されているよりも誤って構成されている可能性が高いため、ETagを使用しないでください。(そして、YSlowは、大規模なマルチサーバーWebサイトを持つユーザーを対象としています。)

もちろん、単一サーバーのセットアップを使用している場合、または分散サーバーのセットアップを使用しているが、何をしているのかを知っている場合は、ETagで十分です。しかし、YSlowにはこれを知る方法がありません。

あなたがチェックすべきエラー説明ページのコメントでこれについて多くの議論があります:http://developer.yahoo.net/blog/archives/2007/07/high_performanc_11.html

また、ServerFaultでこの回答を見つけました。これは、要点を繰り返しています。https ://serverfault.com/questions/55919/yslow-says-etags-are-misconfigured-how-to-configure-etags-properly-on-iis7

于 2010-09-15T19:42:41.857 に答える
2

YSlowは、特定のパターンに準拠していない場合、誤って構成されたetagを報告します。cssとjsを圧縮しているので、etagは次のように出力されます。

Etag "1e10-4889909861a80"-gzip

最後の-gzipを参照してください。それはapacheによってそこに置かれます(バージョン2のみ)。それが「エラー」の原因です。YSlowは、次のようなものが表示されることを期待しています。

Etag "xxxx-xxxxxxxxxxxxx"

基本的に、壊れていないので修正できません。ですから、自分が何をしているのかわからない場合は、完璧なスコアを取得しようとして夢中にならないでください。そのyahooホームページでさえ90しか得られません。

于 2010-06-09T13:57:08.360 に答える
1

はい、それは正しく、よく知られた動作です (実際には必要ないかもしれません)。

ETag についてhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec14.htmlを参照してください。

おそらく、サーバーで ETag を無効にしたいだけでしょう。

編集: また、LiveHTTPHeaders アドオンを使用して、ブラウザの機能を理解してください。このタスクでは、FireBug よりもうまく機能します。

于 2009-05-08T19:43:32.773 に答える
1

私はあなたと同じ問題を経験しています。etag を削除すると動作します。

構成ファイルに次を追加します: FileETag none

于 2009-07-30T04:08:44.317 に答える
0

こんにちは私は同じ問題を抱えていました。しかし、FileETagを入れるだけではうまくいきませんでした

私がそれを修正した方法(そしてこれが正しいかどうかはわかりませんが、それは機能します)は私が

FileETagなし

htaccessファイルの下部にあります。

それからySlowは幸せでした。

于 2010-01-11T04:03:21.880 に答える