sea*_*owg 5 ruby-on-rails heroku varnish http-caching
注意:如果我的任何假设错误,请纠正我.我不太确定这个......
我一直在玩Heroku上的HTTP缓存,并尝试在Heroku上使用Varnish进行缓存时尝试区分移动和桌面请求.
我的第一个想法是我可以设置一个Vary标题,以便缓存变化If-None-Match.由于Rails自动发回从内容散列生成的etags,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'
Run Code Online (Sandbox Code Playgroud)
编辑:我知道我可以使用,Vary: User-Agent但如果可能的话,尽量避免它,因为它有很高的漏洞率(很多很多用户代理).
你可以试试Vary: User-Agent。但是,您将拥有单个页面的许多缓存版本(每个用户代理一个)。
另一种解决方案可能是直接在反向代理中检测移动浏览器,在反向代理尝试查找缓存页面之前设置 X-Is-Mobile-Browser 客户端标头,在后端服务器上设置Vary: X-Is-Mobile-Browser(以便反向代理将仅缓存同一页面的 2 个版本)并Vary: User-Agent在发送到客户端之前替换该标头。
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |