web-dev-qa-db-ja.com

「Etagヘッダーが見つかりません」エラーを修正するには?

ready.mobi で自分のウェブサイトをテストしたところ、

大失敗

すべてのページアセットは適切なEtagヘッダーを使用して、クライアント側のキャッシュを有効にし、将来のページの読み込みを高速化する必要があります

No Etag header found.

FixItページ は役に立たない-その問題を解決するにはどうすればよいですか? .htaccess?

追伸私のWebサイトは、Apacheを備えた外部仮想サーバーで実行され、CodeIgniter PHPフレームワークを使用しています。

2
MarcinWolny

PHPでは、ヘッダー関数を使用して、次のようにカスタムEtagを指定できます。

 $et="11111"; // any custom etag value
 header("ETag: \"".$et."\"",true);

問題のWebページを更新するときは、etag値が更新されていることを確認してください。手動のetag更新を行いたくない場合は、代わりに次のコードを使用できます。

 $et=md5(time()); // 32-bit etag value calculated based on current time in seconds since year 1970.
 header("ETag: \"".$et."\"",true);

フレームワークを使用しているため、他のheader()関数のPHPソースを調べて、上記のコードのいずれかを配置します。

2
Mike

すべてのページアセットは適切なEtagヘッダーを使用する必要があります

私のWebサイトは、Apacheで外部仮想サーバー上で実行されます

PHPを使用してページアセット(静的リソース:画像、スクリプト、css)のETagヘッダーを現実的に送信することはできません。それ以外の場合は静的で、リソースはPHPを介してすべてを遅くし、プロセッサーを集中的に使用するため、最初にETagsを設定するオブジェクトを無効にします。

幸いなことに、Apacheには静的ファイル用のETag機能が組み込まれています。Apacheではデフォルトで有効になっていますが、ホストはこの機能を無効にする傾向があります。ホストがサーバー設定のAccessOverride FileInfoディレクティブで許可していれば、FileETagディレクティブを使用して.htaccessで有効化/上書きできます。

.htaccess(またはサーバー設定):

# Set ETags based on the files i-node, last modified time and file size (default)
FileETag INode MTime Size

複数のサーバー間で負荷分散を行っている場合は、INodeキーワードを削除する必要があります。これはサーバーごとに異なるため、ファイルが実際に変更されていないときに異なるETagsが送信されることになります。

これは、実際にETagヘッダーを設定するのに十分なはずです。ただし、ブラウザがCache-Control: no-storeヘッダー(または同様のヘッダー)を送信してキャッシュをブロックしていないことも確認する必要があります。ブラウザーは、対応するIf-None-Matchヘッダーを以前に送信したETag値とともに送信しません応答で。両方が必要です。 ETag検証は、通常のブラウザキャッシュと組み合わせて使用​​する必要があります。

参照:
http://httpd.Apache.org/docs/2.4/mod/core.html#fileetag

1
MrWhite