You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在部署到Vercel的静态Astro网站中启用stale-while-revalidate头部

问题:Astro静态站点中stale-while-revalidate无法触发重新获取

我在Astro网站里尝试用stale-while-revalidate响应头实现页面定期更新,但始终触发不了重新获取操作。

我的代码片段

API路由代码

return new Response(
  JSON.stringify({
    currentlyPlaying:
      currentlyPlayingTrack && formatTrack(currentlyPlayingTrack),
    topTracks: userTop.items.map(formatTrack),
  } satisfies APIResponse),
  {
    headers: {
      "Cache-Control": "public, s-maxage=60, stale-while-revalidate=30",
    },
  },
);

index.astro代码

const response = await GET(Astro);
const { topTracks } = (await response.json()) as APIResponse;

Astro配置

output: "static",
adapter: vercelStatic({
  imageService: true,
}),

问题原因

你用的是static输出模式,这种模式下Astro会在构建阶段把所有页面预渲染成静态HTML文件。API路由的Cache-Control头在静态构建场景下完全不生效——静态文件一旦生成,服务器端不会再为后续请求触发重新获取逻辑,而stale-while-revalidate的核心就是依赖服务器端在请求时处理缓存与重新获取的平衡,静态输出模式根本不具备这个能力。

解决方案

方案一:切换到Server输出模式

修改Astro配置,改用server输出模式和Vercel服务器适配器:

output: "server",
adapter: vercel({
  imageService: true,
}),

这种模式下,每个请求都会经过服务器端处理,API路由的Cache-Control头会正常生效,stale-while-revalidate的逻辑也能按预期运行——先返回缓存的 stale 数据,同时在后台重新获取最新内容更新缓存。

方案二:客户端侧实现定期刷新(适合必须用静态输出的场景)

如果无法切换到server模式,就在前端用JavaScript定时重新请求API,手动实现类似效果:
在index.astro中添加客户端脚本:

<script is:inline>
  async function refreshTopTracks() {
    try {
      const res = await fetch('/api/你的API路由路径');
      const data = await res.json();
      // 根据你的页面结构更新topTracks内容
      const container = document.getElementById('top-tracks');
      if (container) {
        container.innerHTML = data.topTracks.map(track => `
          <div class="track-item">
            <span>${track.name}</span>
            <span>- ${track.artist}</span>
          </div>
        `).join('');
      }
    } catch (err) {
      console.error('刷新数据失败:', err);
    }
  }

  // 每90秒刷新一次(对应s-maxage+stale-while-revalidate的总时长)
  setInterval(refreshTopTracks, 90000);
  // 页面加载完成后立即刷新一次
  window.addEventListener('load', refreshTopTracks);
</script>

内容的提问来源于stack exchange,提问作者user23351566

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:25:20