我正在尝试为ASP.NET Web Api解决方案添加缓存支持(HTTP和服务器)。
该解决方案位于地理位置,这意味着我可以根据呼叫者IP地址获得不同的结果。
使用类似于 VaryByCustom (like this one)的方法,可以轻松解决服务器端缓存的问题。但是,这并没有解决客户端HTTP缓存的问题。以下是替代方案
我正在考虑以下选项:
在缓存中执行必须重新验证
保持验证服务器端使用与VaryByCustom相同的算法,但在服务器端包含额外的缓存重新验证调用ETAGS或任何跟踪原始缓存值的原始国家/地区的机制。
创建特定国家/地区的路线HTTP 302
在此方案中,应用程序调用
http://site/UK/content
如果缓存过期时来自美国IP地址,则重定向到美国版本
http://site/US/content
它可能会显示与原始IP本地IP不匹配的过期内容。如果缓存过期是一个很小的值(<1小时),那不是一个严重的问题,因为国家变化相当罕见。
推荐的解决方案是什么?
答案 0 :(得分:0)
我不确定我是否理解这个问题。
对于客户端缓存,如果启用私有缓存,则英国用户将缓存英国版http://site/content
,美国用户将缓存美国版http://site/content
。
我能看到的唯一问题是用户是否从美国旅行到英国并访问内容。或者,如果您允许公共缓存,并且美国和英国用户共享某些中间人。
答案 1 :(得分:0)
在详细评估之后,选择了第一种方法。实际实施是:
同意Poul-Henning Kamp地理位置应该是一个传输级别的东西,但遗憾的是不是,所以这是我们能够确定特定国家/地区的缓存新鲜度的唯一方法。
缺点是不能有任何基础设施缓存,例如,所有请求都需要检查服务器的缓存新鲜度。