CloudFront で RefreshHit したときには Age を考慮してくれない

最終更新日

タイトルの通りで他に言うことがないのですが、RefreshHit したときは age を考慮してくれず、TTL がリセットされてしまうようです。

つまり、(CloudFront) - (Proxy) - (Server) のような構成で Proxy でキャッシュしている場合、そのキャッシュの TTL があるわけなのでレスポンスヘッダーには age がつきます。なのでキャッシュの一貫性を保つためには CloudFront の TTL からこの age を引いて欲しいわけです。

しかし、CloudFront の挙動は

  • CloudFront Cache Miss

    • TTL = max-age - age
  • CloudFront Cache RefreshHit

    • TTL = max-age

となります。

(CloudFront の TTL に max-age が設定される場合)

ただこれは CloudFront の仕様上しょうがないなーという感じです。というのも、RefreshHit したときはヘッダーも含めて CloudFront に残ってるキャッシュを使うため、オリジンのレスポンスヘッダーを全く考慮しないためです。ので、age をそもそも見てくれるはずもなく TTL は残ったキャッシュの max-age を設定し直します。