DEV Community

Kenji Suzuki
Kenji Suzuki

Posted on

Cloudflare WorkersのレスポンスをCDNにキャッシュさせたかったが、WorkersがCDNそのものだった

export default {
  fetch() {
    const data = { message: 'Hello at ' + new Date().toISOString() };
    const res = new Response(JSON.stringify(data), {
      headers: {
        'content-type': 'application/json',
        'Cache-Control': 'public, s-maxage=86400, immutable',
      },
    });
    return res;
  },
};
Enter fullscreen mode Exit fullscreen mode
  • 上記のようなコードを書いてもキャッシュされない(毎回日付が変わる)
    • AIに聞いてもとりあえずこういうコードを書いてくる
  • WorkersはCDNの後にぶら下がっているのではなく、CDN(Edge)そのものの上で動いている模様
  • https://developers.cloudflare.com/workers/reference/how-workers-works/
  • このページをちゃんと理解できてなかった
  • 試しにカスタムドメインのDNSにCNAMEで~~~~.workers.devを設定したら、すぐエラー(Connection timed out(522))が返ってきたので、やはりoriginのように扱うのは無理そう
  • Workers内でCache APIを使うのが正解の模様
  • Cache APIにより、キャッシュ無効化は管理しやすくなる
  • Workersのリクエスト回数をケチろうとしてはいけない
    • (それでも十分安いとは思うが)
  • 実行コードを軽量にすることを努力する
    • メモリ128MBのIsolatesはそれなりにシビアに考えたほうがよさそう

Top comments (0)