【问题标题】:HTML5 Manifest Cache behind Basic Auth?基本身份验证背后的 HTML5 清单缓存?
【发布时间】:2011-09-11 18:49:40
【问题描述】:

我有一个使用 HTML5 缓存并且运行良好的网站。

当我使用基本身份验证 (.htpasswd) 保护站点时,缓存似乎不起作用。理想情况下,我希望该站点为经过身份验证的用户缓存。我的理论是,当他们离线访问该站点时,服务器实际上并没有受到攻击,因此会显示缓存的版本。

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

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

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

提前致谢

【问题讨论】:

    标签: apache html caching basic-authentication


    【解决方案1】:

    这其实是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

    【讨论】:

    【解决方案2】:

    其他一些人在 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>
    

    【讨论】:

    • 我们必须将 Satisfy any 添加到 FilesMatch 组中才能完成这项工作。
    • 有人可以确认在离线模式下使用基本身份验证适用于最新的 Safari 吗?
    【解决方案3】:

    我遇到了同样的问题。当我们从主屏幕以全屏模式启动应用程序时,身份验证破坏或禁用了启动缓存清单的页面上的 JS。

    作为一种解决方法,我们从移动 Safari 中将页面保存到主屏幕,这是我们希望运行缓存清单的页面的重复版本。然后,一旦您从主屏幕启动页面,我们会将复制的页面转发到我们正在运行缓存清单的真实页面。

    这会提示登录,但不会破坏运行缓存清单的 JS,因为它在技术上是在我们的“假页面”上提示的,尽管用户随后会立即转发到正确的页面,然后他们的缓存下载然后成功开始。

    这似乎是移动 Safari 的全屏模式中的一个错误。希望这些问题将在未来的版本中得到修复。希望这会有所帮助。


    更新:上述修复最终对我们不起作用,因为清单中不包含虚假的介绍页面,因此一旦离线就不会加载。真可惜。我们最终只是从移动 safari 启动缓存,因此所做的任何更新都需要通过浏览器进行,而不是在全屏模式下进行。

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 2016-12-25
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多