
Vercel、Vary: Cookie付きレスポンスをCDNでキャッシュしない仕様に変更
VercelCDNキャッシュNext.jsパフォーマンス
VercelがCDNの挙動を変更し、Varyヘッダーに Cookie を含むオリジンレスポンスを保存しなくなった。配信自体は続くが再利用されず、x-vercel-cache が MISS になる。Cookieで内容が変わらないならVaryから外す、変わるなら Cache-Control: private を付ける対応が示されている。
何が発表されたか
Vercelは2026年9月30日、CDNのキャッシュ挙動を変更したと公表した。
- オリジンのレスポンスヘッダーに
Vary: Cookieが含まれている場合、VercelのCDNはそのレスポンスを保存しなくなった - レスポンス自体は従来どおり配信される。保存されなくなるため、次回以降のリクエストで再利用されない
- 理由として、Cookieには訪問者ごとに異なる値が入ることが多く、
Cookieで分岐させると「ほとんど再利用されないキャッシュエントリが大量に生成される」ことを挙げている
確認方法
- レスポンスの
x-vercel-cacheヘッダーがMISSになる - Runtime Logs にキャッシュ理由として
vary_key_denied:cookieが表示される
開発者への影響
対応は2通り示されている。
- Cookieの有無でレスポンスが変わらない場合:
VaryからCookieを外す。これでCDNキャッシュが再び効くようになる - Cookieによってレスポンスが変わる場合:
Cache-Control: privateを付ける。共有CDNキャッシュにパーソナライズされた内容が載るのを防ぐ
実務上の注意点は次のとおり。
- フレームワークやミドルウェア、認証ライブラリが自動的に
Vary: Cookieを付けているケースがある。意図せず該当している可能性があるため、まずx-vercel-cacheを確認したい - 該当していた場合、これまでキャッシュされていたページがオリジンに到達するようになる。表示が壊れるわけではないが、応答時間とファンクション実行数に影響しうる
- 逆に、Cookieで内容が変わるページが共有キャッシュに載っていた状態は情報漏えいのリスクを含む。
Cache-Control: privateの付与は、その観点でも確認する価値がある
適用期限や移行猶予については本告知では示されていない。
