HTML5 离线缓存

离线资源缓存
  为了能够让用户在离线状态下继续访问 Web 应用,开发者需要提供一个 cache manifest 文件。这个文件中列出了所有需要在离线状态下使用的资源,浏览器会把这些资源缓存到本地。本节先通过一个例子展示 cache manifest 文件的用途,然后详细描述其书写方法,最后说明缓存的更新方式。
//在IIS下最好使用 xxx.appcache文件

原因:

cache manifest 格式
下面说明书写 cache manifest 文件需要遵循的格式。

  1. 首行必须是 CACHE MANIFEST。
  2. 其后,每一行列出一个需要缓存的资源文件名。
  3. 可根据需要列出在线访问的白名单。白名单中的所有资源不会被缓存,在使用时将直接在线访问。声明白名单使用 NETWORK:标识符。
  4. 如果在白名单后还要补充需要缓存的资源,可以使用 CACHE:标识符。
  5. 如果要声明某 URI 不能访问时的替补 URI,可以使用 FALLBACK:标识符。其后的每一行包含两个 URI,当第一个 URI 不可访问时,浏览器将尝试使用第二个 URI。
  6. 注释要另起一行,以 # 号开头。

mainfest清单格式实例:

CACHE MANIFEST
#上面一句必须
#v1.0.0
#需要缓存的文件
CACHE:
a.js
b.css
#不需要缓存的文件
NETWORK:
*
#无法访问页面
FALLBACK:
404.html

更新缓存
应用程序可以等待浏览器自动更新缓存,也可以使用 Javascript 接口手动触发更新。
自动更新
浏览器除了在第一次访问 Web 应用时缓存资源外,只会在 cache manifest 文件本身发生变化时更新缓存。而 cache manifest 中的资源文件发生变化并不会触发更新。
手动更新
开发者也可以使用 window.applicationCache 的接口更新缓存。方法是检测 window.applicationCache.status 的值,如果是 UPDATEREADY,那么可以调用 window.applicationCache.update() 更新缓存。示范代码如下。
清单 5 手动更新缓存

window.applicationCache.addEventListener(‘updateready‘,function(e){
    if(window.applicationCache.status == window.applicationCache.UPDATEREADY){
        window.applicationCache.swapCache();

        if(confirm("loding new?")){
            window.location.reload()
        }
    }
},false)    

注意点:
1.对于每个index.html?id=1或index.html?id=2都会分别缓存index.html页面,可以通过chrome浏览器Resources/Application Cache观察

2.manifest文件的mime-type必须是 text/cache-manifest类型

3.mainfest文件中的路径和页面使用的路径,应该一直,区分大小写、

实例代码:

1.新建clock.appcache文件

CACHE MANIFEST
 #上面一句必须
 # v1.0.4
 # 需要缓存的文件
 CACHE:
/view/clock.html
/js/clock.js
/js/jquery-1.11.3.min.js

#不需要缓存的文件
NETWORK:
/css/clock.css

#无法访问的页面
FALLBACK:
404.html

2.添加clock.html文件,引用mainfest文件

关键代码:

<html manifest="../Cache/clock.appcache">

<!DOCTYPE html>
<html manifest="../Cache/clock.appcache">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />
    <link href="../css/clock.css" rel="stylesheet" />
</head>
<body>
    <p>
        The time is :<output id="clock"></output>
    </p>
    <p>
        <a href="404.html">404.html</a>
    </p>
    <script src="../js/jquery-1.11.3.min.js"></script>
    <script src="../js/clock.js"></script>
</body>
</html>

3.项目结构

4.监视结果:

时间: 2024-10-08 00:38:31

HTML5 离线缓存的相关文章

HTML5 离线缓存管理库

一.HTML5离线缓存技术 支持离线缓存是HTML5中的一个重点,离线缓存就是让用户即使在断网的情况下依然可以正常的运行应用.传统的本地存储数据的方式有 localstorage,sessionstorage和cookie.但是这些传统的方式有着致命的弊端.首先这些传统的存储方式的最大使用空间有 限,最多不超过5M;其次它们处理大规模的结构化数据的能力有限.鉴于传统方式的局限性,HTML5提出了三种新的离线缓存解决方案:Web SQL,indexedDB和File System. 其中Web S

HTML5离线缓存(Application Cache)

HTML5离线缓存又名Application Cache,是从浏览器的缓存中分出来的一块缓存区,要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源. Manifest 文件 manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容). manifest 文件可分为三个部分: CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存 NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓

html5离线缓存使用

html5 离线缓存使用以及注意事项 1.index.html中加入离线缓存的声明文件 如:<!DOCTYPE html><html manifest="test.appcache"> test.appcache 与 index.html在相同路径下. 2.服务器端加入MIME TYPE声明:tomcat如下 web.xml中加入<mime-mapping> <extension>manifest</extension> &l

HTML5离线缓存攻击测试

本实验采用局域网模拟,通过修改本地HOSTS文件来模拟域名以及DNS欺骗.合法网站使用Linux CentOS7的apache服务器搭建,IP为192.168.1.113,HOSTS文件中加入192.168.1.113 www.cache-test.com来模拟域名.正常访问页面如下图所示,在离线时也能够正常刷新出来. 攻击者由安装有XAMPP服务器的桥接虚拟机表示,IP为192.168.1.154.攻击者可以访问本目录的demo_html.appcache获得缓存文件,在同名文件加入自己的恶意

node.js与HTML5离线缓存

最近正学到HTML5的离线缓存,却看到需要配置服务器.一下子就懵了,毕竟服务器的有关配置一般是很复杂的,而node.js的服务器是自己的代码生成的,这下要怎么配置?在网上搜索了很久,都没用关于node.js与HTML5离线缓存的,但是apache之类的却一大堆.在看完网易云课堂的一个php教程之后,开始理解了HTML5的离线缓存原理,并成功搭配node.js实现了. 首先简要讲一下HTML5离线缓存的原理. 浏览器向服务端发出请求,请求获取一份MIME类型为 text/cache-manifes

HTML5 离线缓存详解(转)

离线缓存是html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的,离线缓存也一样.反正IE9(包括)及IE9以下的浏览器目前是不支持的.如果用在移动端,应该都能支持.检测是否支持离线缓存也是比较简单的. if(window.applicationCache){ alert("支持离线缓存"); } else{ alert("不支持离线缓存&q

HTML5离线缓存

参考文档:http://www.w3cschool.cc/html/html5-app-cache.html HTML5 应用程序缓存 又称离线缓存 ,即使断线了,刷新后也还是缓存了原来的页面,不会404了 首先,请在文档的<html> 标签中包含 manifest 属性: <!DOCTYPE HTML> <html manifest="page.appcache"> <!--这里的page.appcache是一个文件,自己手动生成-->

HTML5离线缓存问题

1.应用程序缓存 什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问.应用程序缓存为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载得更快 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源. 主浏览器都支持,IE8.IE9除外 注意事项 MineType 文件需要配置正确的 MIME-type,即 "text/cache-manifest&

使用 jQuery Mobile 与 HTML5 开发 Web App —— HTML5 离线缓存

本文要介绍的,是 HTML5 离线网络应用程序的特性,离线网络应用程序在 W3C 中的实际名称是 "Offline Web applications" ,也称离线缓存.当用户打开浏览器时,浏览器会将一个列表中指定的资源都下载并储存在本地.下次当用户再访问这个网络程序时,浏览器会自动引用本地缓存中相应的文件,而不会再从网络下载这些资源.不管离线网络应用程序是否专为 Web Apps 而设,但这对于 Web Apps 来说无疑是个非常实用的特性,它使到 Web Apps 相对于原生 App

HTML5离线缓存攻击测试(二)

经过昨天的测试,发现使用离线缓存的网站会被攻击.但是,不使用离线缓存的网站就真的不会受到这样的攻击么? 据我理解,按照标准当浏览器请求manifest文件时,若没有请求到,或者文件发生改变,应当不使用缓存,进行缓存更新的,然而实验的结果并不总是这样. (很郁闷相同的操作为啥有时候结果不一样,不过大部分还是造成了离线缓存攻击的效果.) 首先,拿百度主页做实验,用修改HOST文件的方式将百度主页离线缓存为其他内容(这里就可以加入恶意代码),再改回正常,表示回到正常的网络环境,主要要关闭浏览器,不然刷