【问题标题】:Application Cache Error event: Manifest fetch failed (4)应用程序缓存错误事件:清单提取失败 (4)
【发布时间】:2014-12-12 10:51:24
【问题描述】:

我正在尝试在我的应用程序中实现 AppCache。我在 IIS 中添加了相应的 MIME 类型。请看我下面的html标签

<html manifest="example.appcache">

我的清单看起来像:

CACHE MANIFEST

Content/img/logo-header.png 
Content/img/img-sprite.png
Content/img/icon-top-nav-sprite.png

NETWORK:
*

当我尝试执行我的应用程序时,我的 chrome 控制台中出现以下错误

Creating Application Cache with manifest http://localhost:7520/example.appcache 
Application Cache Checking event 
Application Cache Error event: Manifest fetch failed ***(4)*** http://localhost:7520/example.appcache 

你能帮我解决这个问题吗?

【问题讨论】:

  • 谁能帮我解决这个问题?
  • 你让它工作了吗?我在最新的 chrome 上遇到了同样的问题,找不到答案
  • 没有 Iszak,我做不到 :(
  • 您是否使用 chrome 开发者工具来模拟移动设备或类似的东西?
  • 我在 pc chrome 上遇到了同样的问题,但在移动设备上运行正常。电脑上 chrome 的版本是 47.0.2526.106 m(64 位),移动设备上的版本是 47.0.2526.83 .

标签: google-chrome html5-appcache cache-manifest application-cache manifest.cache


【解决方案1】:

我又浪费了一天时间来调试这个问题。 看起来,清单文件必须始终返回状态码 200(我遇到了 302 的问题),并且清单本身和清单中定义的所有文件必须返回到浏览器,而没有标头 no-store。

【讨论】:

    【解决方案2】:

    我刚刚在我自己的一个网站上遇到了这个问题(错误代码为 4)。在下载缓存后,我对域中的所有 URL 设置了 redirect,以重定向到站点的 HTTPS 版本。我怀疑此错误代码与由于重定向导致清单不可用有关。

    就我而言,我通过清除 chrome://appcache-internals 中的缓存文件(个人)解决了这个问题,然后重新访问根站点以体验重定向到我的域的新安全版本。

    如果您处于类似情况并且无法清除应用缓存(例如,因为您的用户不知道他们正在接收过时的内容),您可以尝试更改您的网站,以便在旧 URL 处请求缓存清单不会导致重定向,而是允许允许浏览器下载新版本页面并遇到重定向的网络请求。有关清除缓存清单的信息,请参阅 this question

    【讨论】:

    • 我在访问网络邮件界面时遇到了问题。删除 chrome://appcache-internals 中的项目为我解决了这个问题。谢谢!
    【解决方案3】:

    这是一个愚蠢的错误,我做了一些愚蠢的事情并且它起作用了:

    1. 访问 chrome://appcache-internals/ 并清除我的网络缓存
    2. 在 CACHE MANIFEST 行下添加 #v1.0.1
    3. 重新加载

    然后我删除新行并且错误不再出现。 @.@

    【讨论】:

      【解决方案4】:

      对我有用的只是在记事本中打开清单并将其保存为 UTF-8 编码。只是告诉浏览器渲染为 UTF-8 是不行的,文件实际上必须是 UTF-8 编码。

      我还按照此博客http://www.codemag.com/article/1112051 中的说明详细了解如何构建离线应用程序。

      【讨论】:

        【解决方案5】:

        如果您正在使用它,只需禁用 chrome 中的设备模拟器,或者查看下面有关如何修复的详细说明。

        刚刚为我找到了问题。我正忙于构建一个移动站点,因此在构建它时,我使用 Google Chrome 开发人员工具来模拟用户代理/设备模拟器。

        一旦我关闭此功能,它就可以正常工作。

        问题似乎是传递给页面主加载的用户代理和清单的用户代理不匹配,因此会给出错误,因为如果我的代码不通过访问,我的代码将重定向 (302) 用户移动设备。

        理论上,用户是通过移动设备访问的,但 Chrome 在请求清单内容时不会发送设备选择器上设置的“假”用户代理。

        所以这里我们得到了主页: 127.0.0.1 - - [31/​​Aug/2016:12:53:58 +0200] "GET / HTTP/1.1" 200 7578 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/ 601.1.46 (KHTML, like Gecko) 版本/9.0 Mobile/13B143 Safari/601.1"

        然后检索清单: 127.0.0.1 - - [31/​​Aug/2016:12:53:58 +0200] "GET /manifest.appcache HTTP/1.1" 200 130 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/ 537.36(KHTML,如 Gecko)Chrome/52.0.2743.116 Safari/537.36"

        然后它尝试让主页对其进行索引,但用户代理在这里不正确: 127.0.0.1 - - [31/​​Aug/2016:12:53:58 +0200] "GET / HTTP/1.1" 302 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML , 像壁虎) Chrome/52.0.2743.116 Safari/537.36"

        【讨论】:

          【解决方案6】:

          我刚刚遇到这个问题,原来是因为我的服务器返回一个内部服务器错误,这是由于我的服务器配置 (.htaccess) 有问题。

          【讨论】:

            猜你喜欢
            • 2015-03-22
            • 1970-01-01
            • 2011-08-09
            • 2012-08-24
            • 1970-01-01
            • 2015-11-14
            • 2012-12-12
            • 1970-01-01
            相关资源
            最近更新 更多