web-dev-qa-db-ja.com

HTTPヘッダーキャッシュ時間:s-maxageおよびmax-age

私のウェブサイトにCDNを設定していますが、「httpd.conf」ファイルに追加する次のサンプルを見つけました。これはクライアントとCDNのキャッシュ時間を調整するために使用されます。

ExpiresActive On
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css  "access plus 1 year"
ExpiresByType text/js   "access plus 1 year"
ExpiresByType application/x-javascript   "access plus 1 year"
ExpiresByType application/javascript   "access plus 1 year"
ExpiresByType application/x-shockwave-flash   "access plus 1 year"

<FilesMatch "\.(gif|jpe?g|png|ico|css|js|swf)$">
Header set Cache-Control "s-maxage=600"
</FilesMatch>

今、イメージファイルを更新し、CDN(s-maxage = 600)が600秒で更新されると仮定しますが、クライアントはどうですか? 「max-age」は1年に設定されているため、クライアントがWebに再度アクセスした場合、HTTPリクエストを送信して更新されたコンテンツを確認し、新しいバージョンをダウンロードしますか?これは実際にどのように機能しますか?

ありがとう!!

5
RRN

s-maxageヘッダーはプロキシを対象としていますが、max-ageは通常のユーザーを対象としています。

典型的なエンドユーザー(プロキシを使用しない)は、ファイルを1年間キャッシュします。同じshouldは、プロキシを使用しているユーザーにも当てはまります。プロキシは、おそらくmax-ageヘッダーを含めて、ファイルを変更せずに送信する可能性が高いからです。

ただし、プロキシ自体は600秒間しかキャッシュしないため、同じプロキシ上の別のユーザーがアクセスすると、ブラウザがファイルを要求し、プロキシはサーバーから新しいコピーを取得します。

正直に言うと、通常のユーザーの有効期限が長くなったときに、プロキシにこのような短い有効期限を設定する本当の理由はないと思います。それらを同じに設定する必要があります(つまり、s-maxageを1年の秒数に設定します)。

5
DisgruntledGoat