Edge Security Acceleration (ESA) は、オリジンサーバーからクライアントに最も近い POP (Point of Presence) に静的リソースをキャッシュします。静的リソースにアクセスすると、システムはオリジンサーバーの代わりに POP からリソースを取得し、リソースへのアクセス効率を向上させます。すべての POP にはキャッシュコンポーネントが搭載されています。ユーザーまたはオリジンサーバーが POP とやり取りすると、キャッシュコンポーネントはオリジンサーバーからリソースをキャッシュし、キャッシュされたリソースの Time-to-Live (TTL) を指定します。
デフォルトのキャッシュポリシー
キャッシュ構成は、ESA のキャッシュコンポーネントに送信されるクライアントリクエストに対してのみ有効です。クライアントリクエストがキャッシュコンポーネントに送信されるかどうかを判断するために、ESA は次のプロシージャを実行します。
リクエストが GET または HEAD タイプであるかを確認します。
リクエストがキャッシュルールで指定された条件を満たしているかを確認します。リクエストが条件を満たす場合、グローバルキャッシュ設定ではなく、そのキャッシュルールがリクエストに適用されます。詳細については、「成功応答とリダイレクトのキャッシュルール」をご参照ください。
ファイル拡張子が「デフォルトでキャッシュされるファイルの拡張子」にリストされているかを確認します。リストされている場合、グローバルキャッシュ設定がリクエストに適用されます。
デフォルトでキャッシュされるファイルの拡張子
デフォルトでは、ESA は、リクエストされたファイルの拡張子が以下にリストされている場合にのみ、一致したルールに従ってファイルをキャッシュします。キャッシュされたリソースの TTL は、リソースがヒットしたキャッシュルールによって決定されます。
キャッシュしたいリソースタイプが以下のリストにない場合は、そのようなタイプのリソースに対してキャッシュルールを作成してください。詳細については、「ルール」をご参照ください。
以下に、さまざまな種類のファイルの拡張子をリストします。
ドキュメント:
DOCおよびDOCX:Microsoft Word ドキュメント。PPTおよびPPTX:Microsoft PowerPoint プレゼンテーション。PDF:ポータブルドキュメント。CSV:カンマ区切り値ファイル。
画像ファイル:
BMP:ビットマップ画像。GIF:Graphics Interchange Format (GIF) 画像。ICO:アイコン画像。JPEGおよびJPG:Joint Photographic Experts Group (JPEG) 画像。PNG:Portable Network Graphics (PNG) 画像。SVGおよびSVGZ:Scalable Vector Graphics (SVG) 画像。TIFおよびTIFF:Tagged Image File Format (TIFF) 画像。WEBP:可逆圧縮と非可逆圧縮の両方をサポートする WebP 画像。
音声ファイル:
MP3:MPEG-1 Audio Layer III (MP3) ファイル。FLAC:Free Lossless Audio Codec (FLAC) ファイル。MIDおよびMIDI:Musical Instrument Digital Interface (MIDI) ファイル。
動画ファイル:
AVI:Audio Video Interleave (AVI) ファイル。MP4:MPEG-4 (MP4) ファイル。MKV:Matroska Video (MKV) ファイル。WEBM:動画と音声をサポートするオープンメディアコンテナフォーマット。
圧縮ファイル:
7Z:7-Zip ファイル。GZ:GNU Gzip ファイル。RAR:RAR ファイル。TAR:TAR ファイル。ZIP:ZIP ファイル。ZST:Zstandard ファイル。
実行可能ファイル (実行可能プログラム/インストールパッケージ):
APK:Android パッケージファイル。BIN:バイナリファイル。ファームウェアの更新によく使用されます。CLASS:Java バイトコードファイル。DMG:macOS ディスクイメージファイル。EXE:Windows 実行可能ファイル。JAR:Java アーカイブ (JAR) ファイル。MSI:Windows インストーラーファイル。ISO:ISO イメージファイル。
フォントファイル:
EOT:Embedded OpenType (EOT) フォントファイル。OTF:OpenType フォント (OTF) ファイル。TTF:TrueType フォント (TTF) ファイル。WOFFおよびWOFF2:Web Open Font Format (WOFF) ファイル。
スクリプトおよびコードファイル:
CSS:カスケードスタイルシート (CSS) ファイル。EJS:Embedded JavaScript (EJS) テンプレートファイル。JS:JavaScript (JS) ファイル。デザインおよびベクターグラフィックファイル:
EPS:Encapsulated PostScript (EPS) ファイル。PICT:Apple PICT ファイル。PS:PostScript (PS) ファイル。SWF:Shockwave Flash (SWF) ファイル。
成功応答とリダイレクトのキャッシュルール
適用可能なステータスコード:200、203、206、300、301、410。
エッジキャッシュ TTL には 4 つのオプションがあり、それぞれ異なるロジックに基づいて適用されます。
オリジンサーバーのキャッシュポリシーが存在する場合はそれを優先し、存在しない場合はデフォルトのキャッシュポリシーを使用する:オリジンサーバーから返された応答に、キャッシュポリシーを設定するための
Cache-Control、Expires、Last-Modified、ETagヘッダーが含まれている場合、ESA はオリジンサーバーのキャッシュポリシーを使用します。オリジンサーバーから返された応答にCache-Control、Expires、Last-Modified、ETagヘッダーのいずれも含まれていない場合、ESA は ESA のデフォルトのキャッシュポリシーに基づいてリソースをキャッシュします。オリジンサーバーのキャッシュポリシーが存在する場合はそれを優先し、存在しない場合はキャッシュしない:オリジンサーバーから返された応答に、キャッシュポリシーを設定するための
Cache-Controlヘッダーが含まれている場合、ESA はオリジンサーバーのキャッシュポリシーを使用します。オリジンサーバーから返された応答にCache-Controlヘッダーが含まれていない場合、ESA はリソースをキャッシュしません。キャッシュしない:オリジンサーバーから取得されたすべてのリソースは、ESA POP にキャッシュされません。
カスタムキャッシュ有効期間を使用する:ESA は、オリジン応答のキャッシュポリシーにある
Cache-Control、Expires、Last-Modified、ETagヘッダーを無視し、ESA で設定された TTL を使用します。
エラーステータスコードを持つ応答のキャッシュルール
ステータスコード 204、305、404、405、414、424、429、500、501、502、503、504 の場合、キャッシュルールは次のとおりです。
オリジンサーバーが
set-cookie応答ヘッダーを返す場合、応答はキャッシュされません。オリジンサーバーが
set-cookie応答ヘッダーを返さない場合、システムはコンソールでそのステータスコードの TTL が設定されているかを確認します。TTL が設定されている場合、応答はコンソールでの設定に基づいてキャッシュされます。複数のルールが設定されている場合、序数が最も小さいルールが有効になります。
TTL が設定されていない場合、応答はオリジンサーバーからの
Pragma、Cache-Control、またはExpires応答ヘッダーに基づいてキャッシュされます。
オリジンサーバーが
Pragma、Cache-Control、またはExpires応答ヘッダーを返さない場合、応答はデフォルトで 1 秒間キャッシュされます。
ステータスコード 302、307、403 の場合、キャッシュルールは次のとおりです。
オリジンサーバーが
set-cookie応答ヘッダーを返す場合、応答はキャッシュされません。オリジンサーバーが
set-cookie応答ヘッダーを返さない場合、システムはコンソールでそのステータスコードの TTL が設定されているかを確認します。TTL が設定されている場合、応答はコンソールでの設定に基づいてキャッシュされます。複数のルールが設定されている場合、序数が最も小さいルールが有効になります。
TTL が設定されていない場合、応答はオリジンサーバーからの
Pragma、Cache-Control、またはExpires応答ヘッダーに基づいてキャッシュされます。
オリジンサーバーが
Pragma、Cache-Control、またはExpires応答ヘッダーを返さない場合、応答はキャッシュされません。
400 などの他のエラーステータスコードの場合、キャッシュルールは次のとおりです。
オリジンサーバーが
set-cookie応答ヘッダーを返す場合、応答はキャッシュされません。オリジンサーバーが
set-cookie応答ヘッダーを返さない場合、システムはコンソールでそのステータスコードの TTL が設定されているかを確認します。複数のルールが設定されている場合、序数が最も小さいルールが有効になります。その他すべての場合、応答はキャッシュされません。
レンジオリジンフェッチを使用するリクエストの場合、POP がオリジンサーバーから 206 以外のステータスコードを持つ応答を受信すると、POP はキャッシュされたファイルシャードを削除します。オリジンフェッチのタイムアウトでは、キャッシュファイルは削除されません。
レンジオリジンフェッチを使用する場合、オリジンサーバーは大きなファイルを複数の小さなファイルシャードに分割して POP に送信します。たとえば、ファイルが 10 個のシャードに分割され、POP がこれらのシャードのうち 5 個をキャッシュしているとします。POP が 6 番目のシャードをリクエストし、オリジンサーバーが 5xx ステータスコードを返した場合、POP はキャッシュされている 5 個すべてのシャードを削除します。
キャッシュ応答情報
ESA POP は、HTTP リクエストを動的に調整できるように、標準的で明確な応答を提供します。キャッシュに関連する応答ヘッダーには、次の情報が含まれています。
Ali-Swift-Global-Savetime:リソースが最初に ESA POP に入った時刻 (ウェブサイトのキャッシュアーキテクチャによって決定され、L2 POP または別のキャッシュ層の POP である場合があります)。
値は UNIX タイムスタンプです。例:
1745053111は2025年4月19日 16:58:31を示します。
Date:オリジンサーバーがリソースを ESA POP に返す日付。
ESA POP がリソースを再検証するために
If-Modified-SinceまたはIf-None-Matchヘッダーを含むオリジンリクエストを開始し、オリジンサーバーが HTTP ステータスコード 304 を返すと、日付が更新されます。時刻は GMT 形式です。例:
Sat, 19 Apr 2025 08:58:31 GMT。
X-Site-Cache-Status:リクエストされたリソースの ESA POP 上のキャッシュステータス。次のリストは、リソースの状態を説明しています。
HIT:リソースが ESA POP キャッシュ内で見つかりました。
MISS:リソースが ESA POP キャッシュ内で見つかりませんでした。POP はオリジンサーバーからリソースを取得し、クライアントに返します。
NONE/UNKNOWN:次の理由により、リソースはキャッシュ対象外です。
エッジ関数が応答を生成したが、サブリクエストを送信しなかった場合。この場合、応答はキャッシュからのものではなく、キャッシュステータスは
none/unknownとして記録されます。エッジ関数のメインリクエストがサブリクエスト (
fetch) を開始すると、サブリクエストのキャッシュステータスが記録され、メインリクエストのキャッシュステータスはnone/unknownとして記録されます。これは、エッジ関数モジュールがキャッシュモジュールより前に実行されるため、メインリクエストがキャッシュを通過しないために発生します。クライアントリクエストがカスタム WAF ルールにヒットし、WAF によってブロックされた場合。WAF はキャッシュモジュールより前に実行されるため、リクエストはキャッシュを通過せず、キャッシュステータスは
none/unknownとして記録されます。クライアントリクエストがリダイレクトルールまたはHTTPS ルールにヒットした場合。POP は別の URL へのリダイレクト応答を送信します。これらのルールはキャッシュモジュールより前に実行されるため、キャッシュステータスは
none/unknownとして記録されます。
EXPIRED:リソースは ESA POP キャッシュ内で見つかりましたが、期限切れです。POP はオリジンサーバーからリソースを取得し、クライアントに返します。オリジンサーバーから返されるステータスコードは 200 または 206 です。
STALE:
リソースは ESA POP キャッシュから提供されますが、期限切れです。これは次の場合に発生します。
キャッシュ設定が [オリジンサーバーの TTL に従う] で、オリジン応答に
Cache-Control:stale-while-revalidate=<seconds>が含まれている場合。指定された時間内に、ESA はリソースを再検証するためにオリジンサーバーへのリクエストを開始し、期限切れのキャッシュをクライアントに提供します。キャッシュ設定が [オリジンサーバーの TTL に従う] で、オリジン応答に
Cache-Control:stale-if-error==<seconds>が含まれている場合。指定された時間内に、ESA が更新されたリソースを取得するためにオリジンサーバーに接続できない場合、ESA は期限切れのキャッシュをクライアントに提供します。応答キャッシュの有効期限を設定機能が有効になっている場合。この機能により、オリジン応答がタイムアウトした場合やオリジンサーバーに到達できない場合に、ESA POP は期限切れのキャッシュをクライアントに提供できます。
BYPASS
リソースへのリクエストは ESA キャッシュをバイパスします。これは次の場合に発生します。
キャッシュ設定が [オリジンサーバーの TTL に従う] ではなく、ESA がカスタムキャッシュ TTL を 0 秒に設定している場合。
キャッシュ設定が [オリジンサーバーの TTL に従う] であるが、オリジンサーバーから返された
Cache-Controlヘッダーの値がno-cache、no-store、またはmax-age=0である場合。
REVALIDATED
リソースは ESA キャッシュによって提供されますが、期限切れです。ESA は、リソースを再検証するために
If-Modified-Sinceまたはlf-None-Matchヘッダーを含むオリジンリクエストをオリジンサーバーに開始します。オリジンサーバーは HTTP ステータスコード 304 を返します。DYNAMIC
ESA は、リソースが動的コンテンツであり、そのようなリクエストに適用される定義済みのキャッシュルールがないことを検出します。この場合、ESA はオリジンサーバーからリソースを取得し、クライアントに返します。
X-Swift-Cachetime:POP 上のリソースの TTL を秒単位で指定します。X-Swift-Cachetimeの値は ESA で設定された TTL と同じではありません。次の数式を使用して計算されます:X-Swift-Cachetime=Ali-Swift-Global-Savetime+ ESA で設定された TTL -X-Swift-SaveTime。次のシナリオが発生する可能性があります。X-Swift-Cachetimeの値が ESA で設定された TTL (例:3600 秒) と等しい。X-Swift-Cachetimeの値が ESA で設定された TTL よりわずかに小さい。たとえば、ESA で設定された TTL が 300 秒の場合、X-Swift-Cachetimeの値は 295 秒になることがあります。この不一致は、次の理由で発生する可能性があります。L1 ノードが L2 ノードからコンテンツをフェッチする際に高いレイテンシーが発生する。
L1 ノードと L2 ノードの時計が同期していない。
X-Swift-Cachetimeの値が負になる。これは、リソースがキャッシュされた後に ESA の TTL 設定を変更した場合に発生する可能性があります。これは、L1 ノードのキャッシュが期限切れになった後、L2 ノードのキャッシュがまだ有効な間にクライアントリクエストが到着した場合に発生します。たとえば、ESA で TTL が最初に 3600 秒に設定され、後で 300 秒に変更されたとします。リソースがキャッシュされてから 600 秒後にクライアントがリクエストを送信すると、応答にはX-Swift-Cachetime:-300が含まれます。この問題を解決するには、キャッシュをリフレッシュします。
X-Swift-Cachetime:
ESA POP 上のリソースのキャッシュ TTL。単位:秒。
X-Swift-SaveTime:
リソースがクライアントリクエストを受信する現在の POP (L1 POP) に最初に入った時刻。
時刻は GMT 形式です。例:
Sat, 19 Apr 2025 08:58:31 GMT。
キャッシュしないポリシー
ESA POP は、次の条件下ではファイルをキャッシュせず、すべてのファイルリクエストをパススルーします。
キャッシュの再検証
ESA POP 上のキャッシュされたファイルが期限切れになると、次にクライアントがそのファイルをリクエストしたときにキャッシュの再検証メカニズムが有効になります。ESA POP はオリジンサーバーに検証リクエストを送信します。ファイルが変更されていない場合、オリジンサーバーは 304 not-modified メッセージを返し、ESA POP はファイルを再ダウンロードすることなく、キャッシュされたファイルをクライアントに提供し続けます。これにより、クライアントリクエストの応答速度が効果的に向上し、オリジンサーバーからの応答トラフィックが削減されます。
特別なポリシー設定:ファイルは 0 秒間キャッシュされ、ESA POP は各リクエストを検証のためにオリジンサーバーにリダイレクトします。
ESA の [設定] ページで、[エッジキャッシュ TTL] が [オリジンの TTL に従う、またはデフォルトのキャッシュルールを使用] に設定されており、かつオリジンの応答が以下の条件を満たします:
Cache-Control: no-cacheCache-Control: max-age=0
通常のポリシー設定:オリジンサーバーはキャッシュ検証に関連するポリシーに応答し、ESA POP は実際のポリシーを実行します。
[エッジキャッシュ TTL] は、ESA の [設定] ページで [オリジンの TTL に従う、またはデフォルトのキャッシュルールを使用] に設定されており、かつオリジン応答が次のいずれかのキャッシュ検証ポリシーを満たしています:
must-revalidateproxy-revalidatestale-while-revalidate=secondsstale-if-error=seconds
キャッシュ検証ポリシー
次のリストは、キャッシュ検証ポリシーを説明し、関連する例を提供します。
must-revalidate
説明:このポリシーは、リソースが期限切れになった場合、キャッシュ (プロキシキャッシュやブラウザキャッシュを含む) が応答を返す前に、その鮮度を検証するためにリソースをオリジンサーバーに返す必要があることを示します。ユーザーがオフラインであるか、ネットワークが利用できない場合でも、リソースが変更されていないことが検証されない限り、キャッシュは期限切れのリソースを直接使用できません。
例:
Cache-Control: max-age=3600, must-revalidateは、リソースが期限切れになった後、その鮮度を検証するためにオリジンサーバーに返す必要があることを示します。
proxy-revalidate
説明:
must-revalidateポリシーと同様に、このポリシーは CDN やプロキシサーバーキャッシュなどの共有キャッシュにのみ適用されます。このポリシーは、ブラウザキャッシュなどのプライベートキャッシュには適用されません。リソースが期限切れになった場合、共有キャッシュがキャッシュレプリカを提供する前に、検証のためにリソースをオリジンサーバーに返す必要があります。プライベートキャッシュはこの制限を受けません。例:
Cache-Control: max-age=3600, proxy-revalidateは、リソースが期限切れになった後、その鮮度を検証するためにオリジンサーバーに返す必要があることを示します。
stale-while-revalidate=seconds
説明:このポリシーは、リソースが期限切れになった後、指定された期間 (秒単位)、キャッシュが古いキャッシュされたリソースを提供し続けることができることを示します。同時に、POP はバックグラウンドでオリジンサーバーから最新のコンテンツを非同期にリクエストします。このポリシーは、待機時間を短縮し、短時間であれば最新でない可能性のあるコンテンツを受け入れられる場合に適用されます。
例:
Cache-Control: max-age=3600, stale-while-revalidate=60は、リソースが最初に公開されてから 3,600 秒 (1 時間) は新鮮であると見なされることを示します。期限切れになると、リソースは次の 60 秒間ユーザーに提供され続けることができます。同時に、POP はオリジンサーバーから更新を取得しようとします。
stale-if-error=seconds
説明:このポリシーは、サーバーの故障やネットワークエラーなどの理由で POP がオリジンサーバーから最新のコンテンツを取得できない場合に、POP がリソースが期限切れであるがまだキャッシュされていることを示す応答を返すことを許可します。エラーが発生した場合に期限切れのキャッシュコンテンツを使用できる期間 (秒単位) が定義されます。これにより、システムのフォールトトレランスが向上し、オリジンサーバーが利用できない場合でも以前にキャッシュされたコンテンツにアクセスできるようになり、ユーザーエクスペリエンスが向上し、サービス中断の影響が軽減されます。
例:
Cache-Control: max-age=86400, stale-if-error=604800は、リソースが最初に公開されてから 86,400 秒 (24 時間) は新鮮であると見なされることを示します。86,400 秒後の再検証が失敗した場合、最後に正常にキャッシュされたリソースは、次の 604,800 秒 (1 週間) 提供され続けることができます。