3

我们正在考虑在 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 非常具体地用于 SEO 目的,但我们根本不关心移动版本的 SEO。

4

2 回答 2

1

我们的 CDN (EdgeCast) 有规则,可以缓存同一个传入 Url 的多个版本(桌面、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 的灵活性方面也非常有价值。

于 2011-11-09T16:54:38.530 回答
0

如果不同设备(例如手机)的页面呈现不同,则它不是静态内容,不应出现在您的 CDN 上。

仅将真正的静态文件放在您的 CDN 上,并为您的页面考虑不同的缓存策略。

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

希望有帮助。

于 2011-01-26T22:57:22.330 回答