9

我正在阅读有关 HTML5 的应用程序缓存清单的详细信息(尤其是来自这篇出色的文章)。我很好奇这个想法是否可行:

我们将所有静态资源(脚本、css、字体、图像)托管在子域内的 CDN 上(例如,cdn.example.com 和应用程序位于 www.example.com)。是否也可以在 CDN 上托管应用缓存清单?例如,

<!doctype html>
<html manifest="http://cdn.example.com/appcache.manifest">
...
<script src="http://cdn.example.com/foo.js"></script>
...
</html>

如果是,清单列表是否可以来自 CDN 根目录?例如,在清单中:

CACHE MANIFEST
/foo.js

有没有人有这方面的经验和/或知道任何警告?


编辑: WHATWG 规范的工作草案说“离线应用程序缓存清单可以使用绝对路径甚至绝对 URL ”,然后显示了一个带有图像 CDN URL 的示例。

4

2 回答 2

12

我用我的清单进行了测试(在真实示例中)

CACHE MANIFEST
# 2010-06-20:v1

iscroll.js
http://peach.blender.org/wp-content/uploads/big_big_buck_bunny.jpg

它对我有用...您可以使用验证器http://manifest-validator.com/检查您的清单。

W3C 只说文档(具有 manifest 属性的 HTML 文件)必须与 manifest 相同的来源,他们并没有告诉资源的 URL 必须也是......你应该仔细阅读它(在这里)。我还在 W3 示例中找到了跨站点 URL(在此处查看),这意味着它可以正常工作...

最后,不要尝试将清单文件放在 CDN上,只需将其放在您的服务器中并将资源链接到 CDN。清单文件必须与它们的主条目具有相同的来源,其中包括它们的 HTML 文件,并且浏览器会检查清单文件以查看其 HTML 页面列表是否已更改,而不是检查您的 HTML 页面以查看它是否指向不同的清单文件。

于 2012-04-15T04:11:35.540 回答
0

缓存内容必须满足同源限制,比较的源由调用页面(HTML页面)决定。如果您尝试缓存的所有资源都具有不同的主机名,那么根据规范,它们应该被拒绝。因此,即使您可以将清单指定在 cdn 而不是您的主主机上,缓存也应该会失败。

于 2011-09-20T12:57:30.573 回答