【问题标题】:How do browsers handle caching of XAP packages?浏览器如何处理 XAP 包的缓存?
【发布时间】:2011-09-14 17:28:57
【问题描述】:

如您所知,您可以构建一个 silverlight XAP 包并在您的 HTML 页面或 asp.net 页面上使用对象标记来引用它。

当浏览器在用户第一次引用页面时从服务器下载XAP包时,如果用户刷新同一个页面,是重新下载同一个XAP包还是使用缓存版本?

如果用户导航到使用相同 XAP 包的另一个页面,并且由于用户之前所在的页面已经下载了 XAP 包,浏览器是使用缓存版本还是转到服务器并下载再来一次?

如果浏览器一直使用缓存版本,它如何知道何时使用缓存版本以及何时使用 XAP 包的新版本,因为它可能已经用新的更改重新构建了?和包的版本号有关系吗?

【问题讨论】:

    标签: silverlight caching browser client xap


    【解决方案1】:

    XAP 被视为与图像相同的常规资源文件(png/gif/jpg 等)。浏览器在匹配其 HTTP 缓存条件之前不会下载新副本,这超出了此处解释的范围。我们唯一采用的解决方案是在 XAP 的 URL 后附加“?tag”,tag 可以替换版本号,这将迫使浏览器重新下载文件。

    所以我们将我们的网址标记为..

    MySilverlightClient.xap?v1
    MySilverlightClient.xap?v2
    

    等等。因此,即使它被缓存为当前版本也没有问题,但是当服务器端更改新版本时,我们可以将我们的标签 v1 更改为其他内容,这将迫使浏览器将其视为新 URL 并重新下载它,即使它被缓存了。

    【讨论】:

    • 您必须记住使用 XAP 更新所有 HTML 文件中的版本标记,大多数时候这不是什么大问题,因为您通常只在一个 HTML 文件中使用它。为什么在您的 ClientBin 文件夹上配置缓存控制标头对您不起作用?
    • 我在配置缓存控制标头方面没有太多经验,您能指出我可以了解更多信息的方向吗?
    • 关于 URL,所以如果我更改 URL,您是说浏览器将重新下载资源而不是从缓存中使用它?就这么简单吗?
    • 是的,浏览器将匹配整个 URL 字符串,如果匹配,它将获取缓存,否则它将作为新 url 下载。
    • @Akash:我不同意它超出范围,HTTP 行为是问题的基础,你不能仅仅声明它超出范围。最终,silverlight 开发人员的产品将通过 HTTP 交付,并且在执行期间通常与它有很多交互。大多数 SL 开发人员可能会将其视为外围技术,但要做好这项工作需要充分了解其工作原理。
    【解决方案2】:

    我可以回答您问题的第一部分,即当您重新访问/刷新页面时,浏览器会使用 XAP 的缓存副本。事实上,让浏览器下载新副本会很有趣!

    当然,每个浏览器的行为都不同,当源文件发生变化时,IE 似乎是最固执的更新 XAP。正如 Anthony 在 cmets 中指出的那样,根据浏览器的默认内容文件缓存处理,XAP 被视为任何其他内容文件。

    在这个类似的问题中有一些很好的解决方案,涵盖了确保更新 XAP 的其他方法:

    Making the Silverlight XAP file expire from browser cache programmatically

    【讨论】:

    • 如果服务器没有明确说明它需要什么样的缓存行为,IE 会制定自己的规则。如果服务器首先提供正确的缓存控制标头,大多数浏览器的行为都会非常一致。大多数“XAP 缓存”问题的答案与“PNG 缓存”问题的答案几乎相同:了解缓存在 HTTP 中的工作原理。
    • @AnthonyWJones 谢谢,有道理。
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 2011-04-20
    • 2017-12-10
    • 2020-11-08
    • 2020-10-08
    • 2015-10-28
    • 2015-09-04
    • 2017-05-10
    相关资源
    最近更新 更多