gpt4 book ai didi

Varnish 过期 header 配置

转载 作者:行者123 更新时间:2023-12-03 17:45:06 27 4
gpt4 key购买 nike

请帮助我在 Varnish 配置中添加过期 header 。 max_age 已在 vcl_fetch 中定义,需要根据 max_age 添加 expires header。

最佳答案

通常不需要设置Expires标题除了 Cache-Control . Expires header 告诉缓存(无论是代理服务器还是浏览器缓存)缓存文件直到 Expires时间到了。如果两者都是 Cache-ControlExpires已定义,Cache-Control优先。

考虑以下响应 header :

HTTP/1.1 200 OK
Content-Type: image/jpeg
Date: Fri, 14 Mar 2014 08:34:00 GMT
Expires: Fri, 14 Mar 2014 08:35:00 GMT
Cache-Control: public, max-age=600

根据 Expires header 内容应在一分钟后刷新,但由于 max-age 设置为 600 秒,因此图像会一直缓存到格林威治标准时间 08:44:00。

如果您希望在特定时间使内容过期,您应该删除 Cache-Control header 且仅使用 Expires .

Mark Nottingham 写的很好 tutorial on caching .在考虑缓存策略时绝对值得一读。

如果您想设置 Expires header 基于 Cache-Control: max-age ,你需要在你的 VCL 中使用 inline-C。以下复制自 https://www.varnish-cache.org/trac/wiki/VCLExampleSetExpires以防将来删除该页面。

添加以下原型(prototype):
C{
#include <string.h>
#include <stdlib.h>

void TIM_format(double t, char *p);
double TIM_real(void);
}C

以及 vcl_deliver 函数的以下内联 C:
C{
char *cache = VRT_GetHdr(sp, HDR_RESP, "\016cache-control:");
char date[40];
int max_age = -1;
int want_equals = 0;
if(cache) {
while(*cache != '\0') {
if (want_equals && *cache == '=') {
cache++;
max_age = strtoul(cache, 0, 0);
break;
}

if (*cache == 'm' && !memcmp(cache, "max-age", 7)) {
cache += 7;
want_equals = 1;
continue;
}
cache++;
}
if (max_age != -1) {
TIM_format(TIM_real() + max_age, date);
VRT_SetHdr(sp, HDR_RESP, "\010Expires:", date, vrt_magic_string_end);
}
}
}C

关于Varnish 过期 header 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com