2012-09-18 36 views
2

我正在尝试向我维护的应用添加一些脱机缓存。这是我第一次不得不使用AppCache,所以我决定首先用一个小型演示站点来测试它。目前为止,我还没有能够使其脱机部分正常工作。尽管我在脚本中发送了所有这些无缓存标头,但Chrome浏览器似乎缓存了index.php,因为打印出来的日期/时间从未在页面上发生变化,尽管在Firefox中日期正确更新。当我去下线(禁用我的网络适配器)的Chrome继续显示缓存的index.php,而不是由清单中指定,但我发现了以下错误在控制台offline.html:无法正常使用HTML5 AppCache

应用缓存错误事件:清单下载失败(-1) http://html5test.g1testserver/manifest.appcache

火狐只显示“无法连接”对话框。网站的布局和文件内容全部列在下面。

网站布局:

/root/ 
- manifest.appcache 
- index.php 
- offline.html 
- .htaccess 

manifest.appcache:

CACHE MANIFEST 
# version 3 

CACHE: 
offline.html 

NETWORK: 
index.php 

FALLBACK: 
/offline.html 

的index.php:

<?php 
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
    header("Cache-Control: post-check=0, pre-check=0", false); 
    header("Pragma: no-cache"); 
echo '<!DOCTYPE html> 
<html manifest="/manifest.appcache"> 
<head> 
    <title>HTML5 Test</title> 
    <meta http-equiv="CACHE-CONTROL" content="NO-CACHE" /> 
</head> 
<body> 

<h1>This is index.php: '.date('d/m/Y H:i:s').'</h1> 
</body> 
</html> 
'; 
?> 

offline.html:

<!DOCTYPE html> 
<html manifest="/manifest.appcache"> 
<head> 
</head> 
<body> 
    <h1>This will be served in place of index.php</h1> 
</body> 
</html> 

的.htaccess:

AddType text/cache-manifest .appcache 
+0

我觉得后备只被调用一些伟大的信息,如果缓存是不成功http://www.html5rocks.com/en/tutorials/appcache/beginner/ - 有在这里是一个非常有用的部分。 Chrome的资源/应用程序缓存有什么内容? – JonWells

+0

@CrimsonChin:offline.html,index.php和manifest.appcache在资源 – hellsgate

+0

中列出,如果您不想index.php缓存,然后从标记中删除清单属性“浏览器不缓存页面,如果它不包含清单属性(除非它明确列在清单文件本身中),浏览器仍然会缓存清单中的所有其他内容 – JonWells

回答

2

你并不需要包括<html>标签内的清单。这只是当你想缓存页面时才需要。不包括doctype中的清单并不意味着.appcache不会被调用/更新。

因此,如果您希望offline.html在index.php处于脱机状态时作为回退运行,请不要缓存index.php。

的HTML5Rocks有关于如何使用应用程序缓存here