CDN上的全站点缓存问题? (例如移动浏览器的替代内容)

时间:2009-09-26 00:06:11

标签: mobile cdn

我们正在考虑在CDN上托管我们网站的核心(所有不需要动态生成的内容),以便我们的根域(例如“http://example.com/”)指向CDN,然后动态的所有内容都指向备用的二级域(例如,搜索的“http://search.example.com/”)或者通过AJAX调用备用域(例如http://ajax.example.com/)在静态内容之上分层。

这似乎是许多网站非常需要的东西,但即使在CDN主页上也没有看到太多关于进行全站点缓存的信息。至少有一个明显的问题发生在我身上,即我们目前正在检测用户是否来自移动浏览器,如果他们来自移动浏览器,则提供移动内容。问题是,据我所知,对于大多数CDN,您只能存储在页面版本上,因此如果您缓存常规页面,移动浏览器将看到而不是移动版本(显然反之亦然)。

我们可以通过将移动设备移动到像m.example.com这样的独立域来解决这个问题,但是我们需要CDN来检测移动浏览器并将它们重定向到该域(我们也希望这样托管在CDN上,但明确指出移动内容而不是常规内容。

这似乎应得到广泛支持,但我找不到太多关于它的信息。有没有人做过类似的事情?如果是这样,你使用了什么CDN,你是如何解决这个问题的?还有其他需要克服的重大障碍吗?

编辑添加了一些我忘记的事情:

我们还考虑使用javascript重定向到移动网站,但显然没有javascript的旧手机会被冷落,而且他们可能最需要移动版本。

可能影响到这个问题的任何答案的一个约束是我们需要我们的主要网站的URL非常具体用于搜索引擎优化目的,但我们根本不关心移动版本的搜索引擎优化。

2 个答案:

答案 0 :(得分:1)

我们的CDN(EdgeCast)规则将缓存同一传入Url的多个版本(Desktop,Iphone,Blackberry等)。 CDN规则将请求的查询字符串附加到源服务器。我们的源服务器上的自定义代码根据传入的查询字符串呈现正确的版本。例如:

Desktop:    CDN requests /?nomobile  origin server returns Desktop rendering
Iphone:     CDN requests /?iphone    origin server returns Iphone rendering
Blackberry: CDN requests /?mobile    origin server returns Mobile rendering

就CDN而言,有3个不同的URL,因此缓存了3个不同的页面。查询字符串对最终用户完全透明。即使您使用具有媒体查询的响应式设计,这种方法也非常有价值,可以灵活地在服务器级别更改HTML。

答案 1 :(得分:0)

如果各种设备(例如手机)的页面呈现方式不同,则不是静态内容,也不应该在您的CDN上。

只在CDN上放置真实的静态文件,并考虑为您的网页设置不同的缓存策略。

无论如何不是通过JavaScript检测客户端的浏览器,你也可以在服务器端执行此操作,实际上我会推荐你​​,而不是JavaScript。然后你就可以实现重定向方法了。

希望有所帮助。

相关问题