基本身份验证背后的HTML5清单缓存?

时间:2011-06-09 14:40:03

标签: apache html5 caching basic-authentication

我有一个使用HTML5缓存且工作可爱的网站。

当我使用Basic Auth(.htpasswd)保护网站时,缓存似乎不起作用。理想情况下,我希望该网站为经过身份验证的用户进行缓存。我的理论是,当他们离线访问该站点时,服务器实际上并未被命中,因此显示了缓存版本。

HTML5规范的一部分是,如果页面受到保护,它们不会被缓存吗?我找不到任何参考。

是否有人成功创建了受密码保护的可缓存应用程序?

我不确定这是否是特定于浏览器的,但我在Safari中测试 - 它是一个iPad应用程序。

提前致谢

3 个答案:

答案 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启动缓存,因此需要通过浏览器进行任何更新,而不是全屏模式。