我有一个使用HTML5缓存且工作可爱的网站。
当我使用Basic Auth(.htpasswd)保护网站时,缓存似乎不起作用。理想情况下,我希望该网站为经过身份验证的用户进行缓存。我的理论是,当他们离线访问该站点时,服务器实际上并未被命中,因此显示了缓存版本。
HTML5规范的一部分是,如果页面受到保护,它们不会被缓存吗?我找不到任何参考。
是否有人成功创建了受密码保护的可缓存应用程序?
我不确定这是否是特定于浏览器的,但我在Safari中测试 - 它是一个iPad应用程序。
提前致谢
答案 0 :(得分:5)
这实际上是由CORS引起的,因为浏览器将请求视为跨域请求。
一个好的解决方案是将crossorigin='use-credentials'
添加到清单定义中,如下所示:
<link rel="manifest" crossorigin="use-credentials" href="/manifest.json">
这会将您的凭据传递给清单请求。
有关此设置的更多信息:: https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes
答案 1 :(得分:3)
其他一些人在iOS 3.x上抱怨同样的问题,并表示将清单文件移到auth目录之外似乎解决了一些问题: http://lists.apple.com/archives/safari-iphone-web-dev/2010/Sep/msg00000.html
我能够使用如下所示的文件夹中的.htaccess文件来解决此问题:
AddType text/cache-manifest .manifest
<FilesMatch "your.manifest">
Order Allow,Deny
Allow from all
</FilesMatch>
答案 2 :(得分:1)
我有同样的问题。当我们从主屏幕以全屏模式启动应用程序时,身份验证破坏或禁用了启动缓存清单的页面上的JS。
作为一种解决方法,从移动safari我们将页面保存到主屏幕,这是我们希望我们的缓存清单运行的页面的重复版本。然后,一旦从主屏幕启动页面,我们就会将重复的页面转发到我们正在运行缓存清单的真实页面。
这会提示登录,但不会破坏运行缓存清单的JS,因为技术上会在我们的“假页面”上提示,尽管然后用户会立即转发到正确的页面,然后成功开始缓存下载。
这似乎是移动Safari全屏模式中的一个错误。希望这些东西将在未来版本中得到修复。希望这会有所帮助。
更新:以上修补程序最终没有为我们工作,因为虚假介绍页面未包含在清单中,因此它不会在离线时加载。一个无赖。我们最终只是从移动safari启动缓存,因此需要通过浏览器进行任何更新,而不是全屏模式。