首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML 5缓存清单本身被缓存

HTML 5缓存清单本身被缓存
EN

Stack Overflow用户
提问于 2011-05-28 12:45:36
回答 4查看 6.8K关注 0票数 4

我有一个问题,似乎cache.manifest文件是自己缓存的。这意味着(Mobile) Safari没有注意到对文件的所有更改,因此它永远不会更新,并且总是显示最后缓存的文件。

我试图避免使用与cache.manifest文件相同的目录中的一个cache.manifest文件:

代码语言:javascript
复制
ExpiresActive On
ExpiresDefault "access"

这没有帮助,所以我在一个包含以下标题的php文件中更改了cache.manifest:

代码语言:javascript
复制
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Content-Type: text/cache-manifest'); 

对于我如何确保缓存文件本身在可能的情况下被检索,有人有其他的想法吗?

工作于: Safari (桌面),Chrome (三星Galaxy v10.1),火狐

失败: Chrome,Safari (iOS)

将cache.manifest.php重命名为cache.manifest,并将以下行添加到.htaccess

代码语言:javascript
复制
<IfModule mod_expires.c>
    Header set Cache-Control "public"
    ExpiresActive on

# cache.manifest needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5)
    ExpiresByType text/cache-manifest       "access plus 0 seconds"
</IfModule>

如果我在cache.manifest中更改修订注释并在Safari (iOS)上刷新它,它仍然会显示旧文件。我毫无头绪。

EN

回答 4

Stack Overflow用户

发布于 2011-06-30 01:20:32

根据HTML5文档,如果应用程序缓存清单文件是字节对字节的,与以前的文件相同,而不考虑到期/等的HTTP缓存头,则认为它不需要更新。

在缓存清单文件的底部,您需要在文件底部包含一个注释,其中包含最近修改的文件的时间戳,例如:

代码语言:javascript
复制
# last modified: Thu, 30 Jun 2011 01:19:46 GMT

这将打破字节对字节的同一性,即使文件列表保持不变,但少数文件被更新。

票数 3
EN

Stack Overflow用户

发布于 2011-07-03 21:53:30

正如其他答案所暗示的,缓存清单是一个真正的痛苦处理。

我已经调整了我的HTML5记事本应用程序的PHP清单“构建”脚本。

测试和工作在Chrome,火狐,IE8+,安卓和iOS。

它是开源的,可以在这里获得:https://github.com/JasonHanley/note5/blob/master/build.php

我还在我的ExpiresByType中使用了.htaccess文本/缓存清单“访问加0秒”,我认为除了生成的清单时间戳之外,这是必要的。

票数 1
EN

Stack Overflow用户

发布于 2011-09-22 03:59:17

我只是使用了我自己偶然发现了这个,与SimpleCoders的建议类似,我建议如果您使用的是cache.manifest,您可以使用服务器端包含生成cache.manifest,例如:

代码语言:javascript
复制
CACHE MANIFEST
# <!--#flastmod file="index.html"-->
# <!--#flastmod file="whatever.js"-->
# <!--#flastmod file="whatever.css"-->
whatever.js
whatever.css

这样,无论何时更新这些文件,清单都会自动更改。您还可能需要为该文件启用includes并禁用缓存,例如: Apache配置,如下所示:

代码语言:javascript
复制
Alias /whatever /var/www/whatever
<Directory /var/www/whatever>
     Options +Includes
     AddHandler server-parsed .manifest
</Directory>
CacheDisable /whatever/ihealth.manifest

检查您的服务器日志,以确保您返回的文件使用的是"200 Okay“,而不是"304未修改”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6161727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档