跳到主要内容

解析 manifest 文件

离线应用包含一个 manifest 清单文件,此文件中列出了浏览器为离线应用缓存的所有资源。实际上, manifest 文件是一个文本文件,它罗列了离线访问应用时所需缓存的文件清单。

引用 manifest 文件的页面,不管有没有罗列清单,都会被缓存。

如需启用应用程序缓存,请在文档的 <html> 标签中包含 manifest 属性。每个指定了 manifest 的页面在用户对其访问时都会被缓存。如果未指定 manifest 属性,则页面不会被缓存(除非在 manifest 文件中直接指定了该页面)。

当然,这个 manifest 的文件路径用绝对路径和相对路径都可以,甚至可以引用其它服务器上的 manifest 文件。该文件所对应的 mime-type 应该是 text/cache-manifest ,所以需要配置服务器来发送对应的 MIME 类型信息。

manifest 文件的 MIME 类型是 text/cache-manifest

  • Python 标准库中的 SimpleHTTPServer 模块对扩展名为 .manifest 的文件能配以头部信息 Content-type:text/cache-manifest ,配置方法是打开 PYTHON_HOME/Lib/mimetypes.py 文件并添加一行代码 '. manifest': 'text/cache-manifest manifest';
  • 配置 Apache HTTP 服务器,开发人员需要将下面一行代码添加到 Apache Software Foundation\Apache2.2\conf 文件夹的 mime.types 文件中 text/cache-manifest manifest

Manifest 文件内容的基本格式要求

  • 第一行必须以 CACHE MANIFEST 开头,紧接着是文件的路径或注释
  • 注释必须以" # "开头
  • 必须声明一个白名单,这个白名单指定的文件将在用户连接因特网后访问,它必须在 NETWORK: 的下一行。 NETWORK 部分罗列的资源,无论缓存中存在与否,均从网络获取

先写 CACHE MANIFEST ,然后换行,每行单列资源文件,每行的换行符可以是 CR 、 LF 或者 CRLF ,格式很灵活,但文本编码格式必须是 UTF-8UTF-8 是多数文本编辑器经常输出的编码格式。

使用 cache manifest 创建页面缓存

manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。 manifest 文件可分为 3 个部分。

  • CACHE MANIFEST :在此标题下列出的文件将在首次下载后进行缓存
  • NETWORK :在此标题下列出的文件需要与服务器连接,且不会被缓存
  • FALLBACK :在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

其中以 # 开头的是注释行。应用的缓存会在其 manifest 文件更改时被更新。如果编辑了一幅图片,或者修改了 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号也是一种使浏览器重新缓存文件的办法。

浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB )

  • 创建一个以 manifest 为扩展名的文件,命名为 cacheData.manifest ,在这个文件中将指定一些文件的路径,如 HTML 、 CSS 、 JavaScript 、 Images

  • 第一行中的 CACHE MANIFEST 是必需的,每个站点都有 5MB 的空间来存储这些数据,如果 manifest 文件或文件里所列的文件无法加载,整个缓存更新过程将无法进行,浏览器会使用最后一次成功的缓存

  • 如果没有指定标题,默认就是 CACHE MANIFEST 部分

  • 添加到 CACHE MANIFEST 区块中的文件,无论应用程序是否在线,浏览器都会从应用程序缓存中获取该文件

  • 没有必要在这里列出应用程序的主 HTML 资源,因为最初指向 manifest 文件的 HTML 文档会被隐含包含进来

  • 如果希望缓存多个 HTML 文件,或者希望将多个 HTML 文件作为支持缓存的应用程序的可选入口,则需将这些文件都列在 CACHE MANIFEST 中

如果需要,用户还可以添加以下内容

  • 在进入因特网后,增加一个缓存内容,这些文件的路径必须在 CACHE: 的下一行

  • 增加备份,这些文件的路径必须在 FALLBACK: 的下一行

  • FALLBACK 部分提供了获取不到缓存资源时的备选资源路径。第一个文件的路径和第二个文件的路径中间有一个空格,这个 FALLBACK: 的作用是:当第一个文件缓存不成功时,或无法找到时,它会缓存第二个文件

  • # 表示注释行标识符,但它还有一个小作用。 Web 应用的缓存只有在 manifest 文件被修改的情况下才会被更新,所以如果只是修改了被缓存的文件,那么用户本地的缓存还是不会被更新的,但是可以通过修改 manifest 文件来告诉浏览器需要更新缓存。利用这点,可以更新注释

  • CACHE 这个是 manifest 文件的默认入口,在此入口之后罗列的文件,或直接写在 CACHE MANIFEST 后的文件,在它们下载到本地后会被缓存起来

  • NETWORK 可选的,在此节后面所罗列的文件是需要访问网络的,即使用户离线访问,也会直接跳过缓存而访问服务器

  • FALLBACK 可选的,用来指定资源无法访问时的回调页面。每一行包括两个 URL ,第一个是资源文件 URL ,第二个是回调页面 URL

3 个好处

  • 可以很明确地了解离线 Web 应用的版本
  • 通过简单地修改版本号就可以轻易地通知浏览器进行更新
  • 可以配合 JavaScript 程序来完成缓存更新