我有一个使用foshttpcachebundle进行缓存的symfony应用程序。
我使用cloudfare作为代理缓存,http cache用于反向代理缓存,我想为私有缓存(浏览器),共享缓存(cloudfare)和代理缓存(http symfony缓存)定义不同的时间。我遵循这个架构:
我的配置文件是:
fos_http_cache:
cache_control:
defaults:
overwrite: false
match:
attributes:
_route: "api_news_article_cget_version"
headers:
reverse_proxy_ttl: 120
cache_control:
public: true
max_age: 30
s_maxage: 60
last_modified: "30 seconds"
因此,此配置会将此标头添加到响应
年龄:0
缓存控制:max-age = 30,public,s-maxage = 60
CF-RAY:3e6474b0b6590c17-AMS连接:保持活着
内容编码:gzip
内容类型:application / json
日期:星期四,2018年2月1日11:08:58 GMT Last-Modified:星期四,2018年2月01日11:09:28 GMT
服务器:CloudFlare的
最后修改时间:2018年2月1日星期四,格林威治标准时间14:37:09
所以,我将解释我的想法:
如果我是第一个提出请求的用户,我会得到一个带有新内容的200响应(这是正确的)。
如果我更新原始服务器上的内容,然后我继续发出请求29秒,我的请求将不会被修改304(因为内容缓存在Cloudflare中)。 (这是对的)
30秒后(最大年龄),我认为下一个响应应该是200响应。我想这是因为浏览器需要刷新缓存(max-age = 30秒),但响应将是相同的,因为代理缓存是60秒。这是不对的,浏览器以相同的方式继续发出请求并获得304代码(不修改)。
60秒后(s-maxage),我应该得到代码响应为200的新响应。这是事实。但是,如果我不更新原始服务器中的内容,我也会得到200的状态代码。我不明白为什么,我认为我应该得到304响应。
现在我的问题是:
为什么我的浏览器在30秒后没有得到新的响应?如果我在谷歌浏览器上禁用缓存,我会在每个请求中获得一个新的响应(状态代码= 200)。
为什么只有在s_maxage结束时才刷新缓存?
如何在浏览器和代理缓存中获取不同的缓存时间?