在HTML中提供包含文件的哈希值以进行缓存?

时间:2011-08-06 12:33:18

标签: html caching

我想知道是否可以在HTML文件中包含外部文件的哈希值。这基本上应该有两个目的:

  • 将未加密的内容包含在加密页面中。 (哈希将确保数据的完整性)
  • 允许对多个页面上使用的资源进行更多缓存

让我们关注第二种情况,并用一个简单的例子来澄清:

<script type="text/javascript" src="jQuery-1.5.1.min.js" hash-md5="b04a3bccd23ddeb7982143707a63ccf9">

浏览器现在可以最初下载并缓存该文件。对于使用相同散列的每个后续页面,很明显可以使用缓存版本。这种技术应该独立于文件来源,文件类型,传输协议工作,甚至无需点击服务器就知道文件已在本地缓存。

我的问题是:这种机制是否可用于HTML?

以下示例仅用于进一步阐明该想法,并且不添加新信息。 包含在2个不相关页面中的库的示例将导致以下步骤。

  1. 用户首次导航至第A页
  2. 浏览器加载页面A并查找外部文件(图像,脚本......)
  3. 浏览器发现页面A包含带有哈希b04a3bccd23ddeb7982143707a63ccf9
  4. 的脚本
  5. 浏览器检查其缓存,找不到带有该哈希的文件
  6. 浏览器从给定的URL下载文件(在页面A的域中提供文件)
  7. 浏览器计算哈希并将其与第A页中所述的哈希值进行比较
  8. 浏览器使用哈希将文件添加到其缓存中。 如果计算出的散列不匹配给定散列,则该文件将被拒绝,并显示错误消息
  9. 浏览器执行文件。
  10. 稍后的某个时间点:

    1. 用户首次导航至第B页
    2. 浏览器加载页面B并查找外部文件(图像,脚本......)
    3. 浏览器发现页面B包含带有哈希b04a3bccd23ddeb7982143707a63ccf9
    4. 的脚本
    5. 浏览器检查其缓存,查找带有该哈希的文件
    6. 浏览器从缓存加载文件。 浏览器在页面B上指向该文件的不关心URL 。此外,文件的内容如何进入缓存并不重要 - 协议,连接和源的加密被忽略。没有连接任何服务器来加载页面B的文件
    7. 浏览器执行文件。

2 个答案:

答案 0 :(得分:0)

它基本上是一个好主意的内核,但我认为HTML中没有任何内容可以支持它。我猜想,可能会用JavaScript整合一些东西。

答案 1 :(得分:0)

没有必要,也没有新想法。

你可以这样做,使用你的例子,省略attr。 “类型”(为简洁起见):

<script src="jQuery-1.5.1.min.js?b04a3bccd23ddeb7982143707a63ccf9">

这已经在很多网站上使用MD5的文件时间戳instad很长时间了,Rails也支持它,请参阅here(查找“timestamp”)或here for PHP的一个例子。

另见How to set up caching for css/js static properly