Playframework 如果没有匹配标头,是否会否决缓存控制:最大年龄?

Playframework 如果没有匹配标头,是否会否决缓存控制:最大年龄?,playframework,cache-control,etag,if-none-match,Playframework,Cache Control,Etag,If None Match,我有一个提供图像的Web应用程序: 很明显,我正在正确设置缓存控制头,web服务器正在设置Etag 问题在于,如果每次都没有匹配到资源,则会忽略缓存控制头。框架将相应地返回304,但存在往返 Etag头可能会否决缓存控制,并且即使资源是本地且有效的,仍然会检查匹配。这对我来说毫无意义 有人知道发生了什么吗?我错过了什么 PD:网络服务器是一个游戏!应用程序您可能会受到代理的攻击 max-age指令用于浏览器,而s-maxage指令用于代理 您的缓存控制标头中似乎缺少s-maxage指令 您可能还

我有一个提供图像的Web应用程序:

很明显,我正在正确设置缓存控制头,web服务器正在设置Etag

问题在于,如果每次都没有匹配到资源,则会忽略缓存控制头。框架将相应地返回304,但存在往返

Etag头可能会否决缓存控制,并且即使资源是本地且有效的,仍然会检查匹配。这对我来说毫无意义

有人知道发生了什么吗?我错过了什么


PD:网络服务器是一个游戏!应用程序

您可能会受到代理的攻击

max-age指令用于浏览器,而s-maxage指令用于代理

您的缓存控制标头中似乎缺少s-maxage指令

您可能还需要添加。即使根据规范,这应该是默认设置,但显式设置也没有坏处

另外,请记住,有些代理很可能会选择忽略所有这些,因此即使您端上的所有配置都非常完美,您也不会完全停止接收请求


我在一个服务中设置了所有3条指令,该服务提供的图像也使用ETag,并且最后一次修改用于CDN,我在测试中没有注意到异常行为。

您可能会被代理击中

max-age指令用于浏览器,而s-maxage指令用于代理

您的缓存控制标头中似乎缺少s-maxage指令

您可能还需要添加。即使根据规范,这应该是默认设置,但显式设置也没有坏处

另外,请记住,有些代理很可能会选择忽略所有这些,因此即使您端上的所有配置都非常完美,您也不会完全停止接收请求


我在一个服务中设置了所有3条指令,该服务提供的图像也使用ETag,最后一次为CDN修改,我在测试中没有注意到异常行为。

最终得到了它。当您使用CMD+R或F5重新加载页面时,某些浏览器Google Chrome和Firefox肯定会忽略本地缓存

在我的例子中,无论我设置的最大年龄有多高,重新加载页面总是会强制执行If None匹配检查并返回304。通过点击链接浏览网站不会触发这种行为,缓存也可以正常工作


注意:我没有注意到这一点,因为在像我这样的单页Web应用程序中,没有链接单击导航,因为大多数链接都是在开始时加载的。

最终得到了它。当您使用CMD+R或F5重新加载页面时,某些浏览器Google Chrome和Firefox肯定会忽略本地缓存

在我的例子中,无论我设置的最大年龄有多高,重新加载页面总是会强制执行If None匹配检查并返回304。通过点击链接浏览网站不会触发这种行为,缓存也可以正常工作


注意:我没有注意到这一点,因为在像我这样的单页Web应用程序中,没有链接单击导航,因为大多数链接都是在开始时加载的。

嗨,谢谢你的回答。忘了提一下,即使在我的开发机器上,在本地主机上,这也会发生,而且显然没有涉及代理。这是悬赏。感谢您抽出时间提供答案。嗨,谢谢您的回答。忘了提一下,即使在我的开发机器上,在本地主机上,这也会发生,而且显然没有涉及代理。这是悬赏。感谢您抽出时间提供答案。