始终提供来自 CDN EDGE 缓存的内容,无论内容多么陈旧。尽可能在后台刷新它。
我有一个NextJS应用程序,它在服务器端呈现一些 React 组件并将它们交付给客户端。对于这个讨论,让我们只考虑我的主页,它是未经身份验证的,对每个人都是一样的。
我想要的是将服务器呈现的主页缓存在 CDN 的 EDGE 节点上,并尽可能多地或始终从该缓存中为终端客户端提供服务。
从我读到的内容来看,CDN(如 Fastly)正确支持缓存相关的标头设置,例如Surrogate-Control并且Cache-Control: stale-while-revalidate应该能够做到这一点,但实际上,我没有看到它像我期望的那样工作。我看到的是:
考虑以下时间线:
[T0] - Visitor1 请求www.mysite.com- CDN 缓存完全冷,因此请求必须返回我的源(AWS Lambda)并重新计算主页。返回带有标头Surrogate-Control: max-age=100和 的响应Cache-Control: public, no-store, must-revalidate。然后访问者 1 提供了主页,但他们不得不等待高达 5 秒钟!呸!愿没有其他游客遭受同样的命运。
[T50] - 访问者 2 请求www.mysite.com- CDN 缓存包含我的文档并立即将其返回给访问者。他们只需要等待 40 毫秒!惊人的。在后台,CDN 从我的源重新获取最新版本的主页。原来它没有改变。
[T80] -www.mysite.com向主页发布新内容,使任何缓存的内容真正过时。该网站的V2现已上线!
[T110] - 访问者 1 返回到www.mysite.com- 从 CDN 的角度来看,自访问者 2 的请求以来只有 60 …
:如果我设置的服务器响应,会发生什么
Cache-Control: private,no-cache,max-age=900?如果标题如下,会发生什么
Cache-Control: public,no-cache,max-age=900?
既然它有no-cache浏览器(或代理服务器)是否考虑max-age?
使用Fastly而不仅仅是拥有自己的自己的Varnish有什么好处?Quickly提供的额外优势和功能是普通的Varnish没有,或者仅仅是Fastly管理Varnish的方式与CloudAMQP托管和管理RabbitMQ的方式相同?