gpt4 book ai didi

ruby-on-rails - '变化 : If-None-Match' to cache mobile and desktop requests separately

转载 作者:行者123 更新时间:2023-12-04 20:53:51 27 4
gpt4 key购买 nike

注意:如果我的任何假设是错误的,请纠正我。我对这些都不是很确定...

我一直在玩 Heroku 上的 HTTP 缓存并尝试解决
使用 Varnish 缓存时区分移动和桌面请求的好方法
在 Heroku 上。

我的第一个想法是我可以设置 Vary header ,因此缓存在 If-None-Match 上变化.由于 Rails 自动发回根据内容哈希生成的 etag,etag 在桌面和移动请求(不同的模板)之间会有所不同,因此它最终会缓存两个版本(不是事实,只是我最初的想法)。我一直在玩这个,但我认为它不起作用。

首先,当/如果有任何东西被缓存为If-None-Match的请求时,我无法理解。无论如何都会有条件得到?其次,在实践中,新请求(没有 If-None-Match 的请求)有时会收到移动站点。这是因为缓存不知道是否提供移动或桌面缓存版本作为 If-None-Match标题不存在吗?

可能听起来,我很困惑。这种方法会以任何方式起作用还是我很傻?另外,如果我根本无法访问 Varnish 配置(就像我在 Heroku 上一样),是否有实现单独的缓存版本?

我在 Rails 中用来设置缓存头的确切代码是:

response.headers['Cache-Control'] = 'public, max-age=86400'
response.headers['Vary'] = 'If-None-Match'

编辑:我知道我可以使用 Vary: User-Agent但如果可能的话尽量避免它,因为它有很高的未命中率(很多很多用户代理)。

最佳答案

你可以试试Vary: User-Agent .但是,您将拥有单个页面的多个缓存版本(每个用户代理一个)。

另一种解决方案可能是直接在反向代理中检测移动浏览器,在反向代理尝试查找缓存页面之前设置 X-Is-Mobile-Browser 客户端 header ,设置 Vary: X-Is-Mobile-Browser在后端服务器上(这样反向代理将只缓存同一页面的 2 个版本)并将该 header 替换为 Vary: User-Agent在发送给客户之前。

关于ruby-on-rails - '变化 : If-None-Match' to cache mobile and desktop requests separately,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063172/

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