Http 缓存控制:中间缓存对最大年龄有何影响?

Http 缓存控制:中间缓存对最大年龄有何影响?,http,caching,http-headers,cache-control,Http,Caching,Http Headers,Cache Control,我目前正在为带有缓存控件:max age=600标题的用户提供一个HTML页面。我相信这允许用户的浏览器缓存页面最多10分钟 我正在考虑在我的服务器前面添加一个CDN,由于上面的标题,该CDN还应该将页面缓存最多10分钟 如果用户在CDN缓存中保存了9分钟后获得了该页面,那么该页面是否仍会在浏览器中缓存10分钟,总缓存时间为19分钟?还是只在浏览器中缓存1分钟?这里有两种基本方法 CDN可以决定它是HTTP缓存,如所定义的。在这种情况下,它必须为从缓存提供服务的每个响应添加一个头(无需联系服务器

我目前正在为带有
缓存控件:max age=600
标题的用户提供一个HTML页面。我相信这允许用户的浏览器缓存页面最多10分钟

我正在考虑在我的服务器前面添加一个CDN,由于上面的标题,该CDN还应该将页面缓存最多10分钟


如果用户在CDN缓存中保存了9分钟后获得了该页面,那么该页面是否仍会在浏览器中缓存10分钟,总缓存时间为19分钟?还是只在浏览器中缓存1分钟?

这里有两种基本方法

CDN可以决定它是HTTP缓存,如所定义的。在这种情况下,它必须为从缓存提供服务的每个响应添加一个头(无需联系服务器)。它还必须保留服务器发送的头。这使下游缓存(例如浏览器的缓存)能够确定其可以缓存响应的时间

例如,如果您的服务器发送:

HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Sun, 15 May 2016 16:51:31 GMT
Cache-Control: max-age=600
然后缓存可能会发送:

HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Sun, 15 May 2016 16:51:31 GMT
Cache-Control: max-age=600
Age: 541
Via: 1.1 mycdn
例如,由和(因此由)使用此方法。有时,缓存会出错:,Varnish会错误地重置缓存响应上的
Date
头。不过,在我的实验中,Firefox和Chrome似乎并没有因此而混淆(因为年龄仍然存在)

或者,CDN可以决定它是HTTP源服务器,并根据自己的规则与您的服务器协作。在这种情况下,它必须添加一个
年龄
头,它必须重置
日期
头,但它还可以对其他头执行任何操作,包括
缓存控制
。例如,它可以按对象在其缓存中花费的秒数减少
max age

HTTP/1.1 200 OK
Server: MyCDN/1.2.3
Date: Sun, 15 May 2016 17:00:32 GMT
Cache-Control: max-age=59
但它甚至可能无法做到这一点,因为一般来说,缓存对静态内容最有用,而静态内容通常是“永远”版本化和缓存的https://code.jquery.com/jquery-2.2.3.js(由以下人员提供服务),它具有相同的
max age=315360000
,并且
将在未来很长时间内过期


因此,您可能需要检查您的特定CDN如何处理此问题。

非常有用的答案,谢谢。我正在查看通过CloudFront提供的一些页面,并惊讶地发现
max age
并没有减少(如第二种方法)。我没有注意到年龄反而在增加。