首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于数据中心和缓存状态的快速/清漆响应头

基于数据中心和缓存状态的快速/清漆响应头
EN

Stack Overflow用户
提问于 2021-04-17 18:28:02
回答 1查看 391关注 0票数 0

我正在尝试创建一个刷新响应头,这将帮助我调试缓存的状态。我想要创建一个头,它将显示请求所经过的数据中心和对象的年龄。类似于:

代码语言:javascript
复制
X-Fastly-Age: VIE:2311s FRA:0s

这意味着对象被缓存在VIE数据中心(屏蔽)中,并且在FRA边缘必须从VIE中获取。

第二个请求将返回如下内容:

代码语言:javascript
复制
X-Fastly-Age: VIE:2311s FRA:133s

我试着设置这个:

代码语言:javascript
复制
set beresp.http.X-Fastly-Age = beresp.http.X-Fastly-Age " " req.http.edge-geo-datacenter ":" obj.entered;

这是可行的,但问题是:

不能用

  • beresp.http编写vcl_hit
  • obj.enteredvcl_fetch

中不可用

因此,基本上,我似乎没有地方来生成这个标题。

如何才能做到这一点?

编辑:

我成功地在vcl_deliver中运行了这个

代码语言:javascript
复制
set resp.http.X-Fastly-Age = resp.http.X-Fastly-Age " " server.datacenter ":" obj.entered;

得到:

代码语言:javascript
复制
> x-fastly-age: (null) DCA:0.001 FRA:0.001

它受到两件事的影响:

  1. 在第一个调用中获取(null) --如果头部为null,是否有一种方法可以不将头放在前面?
  2. ,edge time (FRA)永远不会改变,并停留在0.001上。因此,即使使用obj.entered,它似乎也是缓存的,并且不会改变??

EN

回答 1

Stack Overflow用户

发布于 2021-04-19 11:16:58

我将纯粹从清漆的角度来处理这个问题,因为我没有快速的经验。

清漆使用自动设置的Age标头来确定缓存中对象的年代。

对于非缓存对象,Age响应头的值始终为零。非零值相应地表示对象的年龄。

对于您要得到的null值:我们可以使用if/else语句来解决这个问题。

这是给你的一些VCL:

代码语言:javascript
复制
sub vcl_deliver {
    if(resp.http.X-Fastly-Age) {
        set resp.http.X-Fastly-Age = resp.http.X-Fastly-Age + " " + server.datacenter + ":" + resp.http.Age;
    } else {
        set resp.http.X-Fastly-Age = server.datacenter + ":" + resp.http.Age;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67141626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档