Apache 2.4.25を使用して、プロキシパスを使用して多数のバックエンドサービスを公開しています。 Apacheは、mimeタイプに基づいてキャッシュ制御ヘッダーも設定します。現在のキャッシュ構成は次のようになります。
ExpiresActive on
ExpiresDefault "now"
ExpiresByType text/html "now"
ExpiresByType image/gif "access plus 120 minutes"
ExpiresByType image/jpeg "access plus 120 minutes"
ExpiresByType image/png "access plus 120 minutes"
ExpiresByType text/css "access plus 60 minutes"
ExpiresByType text/javascript "access plus 60 minutes"
ExpiresByType application/x-javascript "access plus 60 minutes"
ExpiresByType text/xml "access plus 60 minutes"
ExpiresByType application/javascript "access plus 60 minutes"
ExpiresByType application/x-font-ttf "access plus 30 days"
ExpiresByType application/x-font-woff "access plus 30 days"
ExpiresByType application/x-font-eot "access plus 30 days"
ExpiresByType application/x-font-svg "access plus 30 days"
ただし、バックエンドサービスの1つは、cache-controlmax-ageヘッダーも設定しています。これにより、応答ヘッダーに2つのmax-age設定が含まれています。
Chromeで見られるように最大エージェント値が重複しています
異なる値を持つ2つのmax-age設定が提示された場合、ブラウザーはどのように反応しますか?また、デフォルトを追加する前に既存のキャッシュ制御ヘッダーを確認することは可能ですか?
同じヘッダーを送信するバックエンドが原因で誤って重複しないようにする場合は、ヘッダー「追加」の代わりにヘッダー「設定」を使用します。
最新のmod_expiresドキュメントによると: http://httpd.Apache.org/docs/current/mod/mod_expires.html
Expiresヘッダーがすでにサーバーによって生成された応答の一部である場合[...]、このモジュールはExpiresまたはCache-Controlヘッダーを変更または追加しません。
したがって、1つのオプションは、バックエンドに、すでに設定されているCache-Controlヘッダーに加えてExpiresヘッダーを設定させることです。たとえば、PHPの場合:
$seconds = 60;
header("Expires: ". gmdate('D, d M Y H:i:s', time() + $seconds). ' GMT');
header("Cache-Control: max-age=". $seconds);
Expiresヘッダーがすでにサーバーによって生成された応答の一部である場合[...]、このモジュールはExpiresまたはCache-Controlヘッダーを変更または追加しません。
それは真実ではありません、Apacheはまだ追加のCache-Control
とExpires
ヘッダーを追加します。