我的nextjs项目(nextjs网站)在google-firebase上运行时遇到了一些问题。我使用google-cloud-functions来运行这个网站。
我想使用缓存。据我所知,在Firebase上托管的Web应用程序会自动将结果存储到CDN,当有正确的标题时。
我在页面中添加缓存头。
# pages/[[...slug]].tsx
export const getServerSideProps = context => {
...
const cacheControlHeader = `public, max-age=${secondsForImages}`;
const expiresHeader = new Date(Date.now() + secondsForImages * 1000).toUTCString();
context.res.setHeader('Cache-Control', cacheControlHeader);
context.res.setHeader('Expires', expiresHeader);
return { props };
...
}
字符串
例如:Expires: Sun, 24 Dec 2023 19:01:34 GMT
(+1天从Sun,23 Dec 2023 19:01:34 GMT)
Firebase很好地存储了页面。在第一次缓慢的请求之后,我很快就从缓存中获得了这个页面
比,我想改变一些页面,比清除和重新生成它的缓存。我使用curl -X PURGE https://www.mywebsite.ololo/mypage
,它也工作得很好
对于重新生成,我尝试这样做curl -v https://www.mywebsite.ololo/mypage
(我也尝试了wget)。我得到正确的标题一切都很好.但这只适用于下一个curl请求,不适用于浏览器。当我试图从我的浏览器中获取它时,通常它做得很慢(第一次)。
有没有人可以帮助我如何从bash(或node-app或php-app)请求重新生成浏览器的缓存?
1条答案
按热度按时间7cjasjjr1#
此标题:
字符串
这会告诉目标浏览器和任何中间服务器,您发送的响应在
max-age
秒内有效。在此之前没有通用的方法来清除文件。如果响应可能会更快到期,则发送较短的max-age;或者考虑为每个唯一响应生成唯一URL(例如,通过在其中包含哈希)。
更新:有一种未记录的方法可以清除特定URL的内容,一个团队成员描述了here。正如在回答中所说的,不能保证这仍然/继续工作,但值得一试:
型