問題点
画像がブラウザーですぐに期限切れになる理由
解決策
CDN キャッシュと TTL(Time-To-Live)
Adobe Scene7 では、特定の画像に対して異なる有効期限を設定できます。例えば、画像が見つからない場合に表示されるデフォルトのイメージは、有効期限が短くなるように自動的に設定されます。
Time-To-Live(TTL)は、ネットワーク内のデータ内の存続期間を制限するメカニズムです。コンテンツ配信ネットワーク(CDN)プロバイダーは、この設定を提供します。有効期間の時間が経過すると、GET から生成元の Scene7 に対するリクエストをトリガーする(If-Modified-Since)要求が送信されます。弊社の CDN プロバイダーが、アドビのサーバーから 304 応答(変更無し)を受け取ると、更新済みの Expires ヘッダーが変更されている場合は、一緒にオブジェクトも更新されます。
数年前に、正式な 10 時間の TTL が発生し、期限切れのヘッダーは CDN キャッシュには影響を与えませんでした。この設定は、CDN TTL または「期限切れ:」ヘッダーに基づいて、オブジェクトが期限切れになった場合、オブジェクトが次に「GET」リクエストで更新されたときに変更されました。このプロセスでは、ヘッダーも更新されます。これで、設定された TTL よりも有効期限が短い場合、CDN の TTL を上書きできるようになります。
上の条件は、オブジェクトが Akamai の「キャッシュ内」にある場合に適用されます。Akamai によって ( IMS ) リクエストが原点に送信される場合、HTTP ヘッダーのみが交換されるため、トラフィックはそれほど影響を受けません。オブジェクトは再度ダウンロードされません。CDN は、オブジェクトが変更されていないかどうかのチェックのみを行い、そのオブジェクトの TTL をキャッシュ内に更新します。
この CDN 設定の影響は、短い有効期限を持つコンテンツの元のサーバーに対して、より頻繁に行われる IMS リクエストが多いということでした。
CDN 設定を変更すると、なぜブラウザーでの画像の有効期限がきれるのですか。
次に例を示します:
応答ヘッダー:
Content-Type[image/jpeg]
Last-Modified[Wed, 20 Jun 2007 21:29:20 GMT]
Etag["0b3a49e639331555ba959a9f1e332c2f"]
Expires[Mon, 13 Aug 2007 02:00:28 GMT]
Date[Mon, 13 Aug 2007 02:00:28 GMT]
Connection[keep-alive]
数年前に、過去に期限切れのヘッダーをもつオブジェクトがキャッシュに保存されました。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Expires: Mon, 13 Aug 2007 16:53:16 GMT
Last-Modified: Thu, 19 Jul 2007 21:42:18 GMT
ETag: "ebb5a6db6c4e78a15db53a29d9d0b9d2"
Content-Type: image/jpeg
Content-Length: 14141
Date: Mon, 13 Aug 2007 06:53:15 GMT
Age: 0
X-Akamai-Purge-Seq-Num: 1336350
Connection: keep-alive
以前のコンテンツ配信ネットワーク(CDN)設定では、この動作は設計どおりでした。過去に期限切れのヘッダーがあるキャッシュにオブジェクトを保存すると、ダウンストリームのヘッダーが「今すぐ」の期限切れになります。「最終更新」日時は変更されていません。したがって、IMS リクエストの原点からの HTTP 304応答は、Akamai でキャッシュされたオブジェクトヘッダーは更新されませんでした。オブジェクトがキャッシュされ、期限切れの場合、CDN プロバイダーは常に「f-modified-since」(IMS)リクエストを発信元に送信します。「最終更新」日が同じであるため、CDN プロバイダーは HTTP 304 応答を受信しました。次に、オブジェクトキャッシュ Time-To-Live(TTL)は設定に基づき10時間に更新されましたが、オブジェクトとヘッダーは変更されません。
その時点で、CDN メタデータを更新し、キャッシュされたヘッダーの更新を成業しました。
お客様がオリジンサーバーから 304 応答ヘッダーのキャッシュ可能なヘッダーを変更するために使用したタグは次のとおりです。
<cache:header-update.allow>on</cache:header-update.allow>
デフォルトでは、CDN プロバイダーは 304 応答を受信したヘッダーを持つキャッシュされたヘッダーを更新されません。したがって、時間が経過した場合は、原点が新しいオブジェクトを持つ 200 応答を返されるまで、オブジェクトは CDN キャッシュ(およびエンドユーザー)のままです。有効期限に達すると、原点が304 に返信した場合は、CDN 上のサーバーはリクエストごとに原点の再検証を続けます。また既に有効期限が切れていたクライアントブラウザーも使用できます。これにより、ブラウザーが次のロード時に再起動する必要がなくなりました。
キャッシュを有効にした場合:header-update.allow のタグは、返信 304 と異なる場合、キャッシュされた応答ヘッダーのキャッシュディレクティブを更新する CDN サーバーに指示します。この機能のヘッダーとみなされる「キャッシュディレクティブ」ヘッダー:有効期限切れ、キャッシュコントロール、エッジコントロール(および暗黙的なサロゲートコントロール)
またヘッダーがキャッシュ内で更新される頻度を制限することに関係しています。このコントロールは、発信元サーバーが新しい期限切れのヘッダー(Adobe Scene7 応答がない場合)を設定しているため、CDN サーバーが、各応答にキャッシュするヘッダーを書き込む必要がある場合の状況を防ぐために存在します。ヘッダー更新頻度のデフォルト設定は 1 分ですが、この値はメタデータタグで変更できます。
<cache:header-update.max-frequency>1m</cache:header-update.max-frequency>
TTL に達すると、オブジェクトは EdgeServers が古いとみなされます。IMS リクエストは常に原点に送信され、同じオブジェクト最終変更時間をチェックします。
お客様が行ったメタデータの変更は、原点から 304 応答と共にヘッダーを更新できるようになります。同じオブジェクトが変更されていない場合、この変更は完全にダウンロードされませんでした。
発信元サーバーへの if-modified-since リクエストは、コンテンツが古い場合にのみ実行されます。つまり、TTL の期限が切れると、ヘッダーは頻繁に更新されません。
アカウントにログイン