HTML5离线缓存

参考文档:http://www.w3cschool.cc/html/html5-app-cache.html

HTML5 应用程序缓存 又称离线缓存 ,即使断线了,刷新后也还是缓存了原来的页面,不会404了

首先,请在文档的<html> 标签中包含 manifest 属性:

<!DOCTYPE HTML>
<html manifest="page.appcache"> <!--这里的page.appcache是一个文件,自己手动生成-->
...
</html>

在Apache,或者在.htaccess文件上加上

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond $1 !^(index\.php|robots\.txt|views|plugins|backup|upload|image|runtime|install)
    RewriteRule ^(.*)$ index.php/$1 [L]
#加上这一句
AddType text/cache-manifest manifest
 </IfModule>

下面就是生成.appcache文件了。格式是

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js

NETWORK:
login.php

FALLBACK:
/html/ /offline.html

但是一个项目中不会只有这么点文件,要把更多的资源文件。css.js.img等加载进来,所以还需要一个遍历目录的方法。以下是我自己改写的一个方法。

<?php

/**
 * 获取路径下所有文件
 * @param string $folder 路径
 * @param int $levels   处理路径层级
 * @return array
 * @author lixianghui
 */
function list_files($folder = ‘‘, $levels = 100) {
    if (empty($folder) || !$levels) {
        return false;
    }
    $files = array();
    //打开目录
    if ($dir = @opendir($folder)) {
        //读取目录句柄
        while (($file = readdir($dir) ) !== false) {
            //过滤非法字符
            if (in_array($file, array(‘.‘, ‘..‘)))
                continue;
            //过滤中文
            if (preg_match("/[\x7f-\xff]/", $file))
                continue;
            //判断是否目录
            if (is_dir($folder . ‘/‘ . $file)) {
                //递归上一层级
                $files2 = list_files($folder . ‘/‘ . $file, $levels - 1);
                //生成目录或合并结果集
                if ($files2)
                    $files = array_merge($files, $files2);
                else
                    $files[] = $folder . ‘/‘ . $file . ‘/‘;
            } else {
                //文件
                //过滤非资源文件
                if (in_array(pathinfo($file)[‘extension‘], array(‘css‘, ‘js‘, ‘png‘, ‘jpg‘, ‘gif‘))) {
                    $files[] = $folder . ‘/‘ . $file;
                }
            }
        }
    }
    @closedir($dir);
    return $files;
}

/**
 * 离线缓存
 * @return void
 * @author lixianghui
 */
function offline_cache(){
    $list = array();
    $file_str = "";   //获取目录下的资源文件
    $dir_upload = list_files(‘upload‘);
    $dir_default = list_files(‘views/default‘);
    $file_array=array_merge($dir_upload,$dir_default);

    foreach ($file_array as $val) {
        $file_str.=$val . "\n";
    }
  //生成appcache文件
    $cache_str = "CACHE MANIFEST\n";
    $cache_str.="#" . date("Y-m-d H:i:s") . "\n";
    $cache_str.=$file_str;
    $cache_str.="NETWORK:\n\n\n";
    $cache_str.="FALLBACK:\nnomore.html";

    file_put_contents("page.appcache", $cache_str);
}

好了,接下来打开console测试,访问页面会看到缓存的资源都加载成功。如果出现保存请检查资源是否保存,或者是否存在

时间: 2024-12-30 17:39:45

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离线缓存问题

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文件的方式将百度主页离线缓存为其他内容(这里就可以加入恶意代码),再改回正常,表示回到正常的网络环境,主要要关闭浏览器,不然刷