【问题标题】:How to configure Play to generate a unique URL according to the asset content?如何配置 Play 根据资产内容生成唯一的 URL?
【发布时间】:2013-07-23 13:46:51
【问题描述】:

我希望所有静态资产(javascript、css、图像)都具有这种缓存行为:

  1. “永远”缓存它们
  2. 他们的 URL 应该是从他们的内容生成的唯一 URL(例如 MD5(content))
  3. 只要资产内容发生变化,资产的 URL 就会发生变化,因此客户端知道要获取新版本。
  4. 这应该会自动发生,无需更改代码。

我可以配置 Play 2 来为我执行此操作吗?

【问题讨论】:

    标签: scala playframework playframework-2.1


    【解决方案1】:

    AFAIK Play 2 在使用Assets 控制器为您的文件生成反向路由时自动使用资产缓存。

    摘自《Play for Scala》一书:

    除了反向路由,使用资产的另一个好处 控制器是其内置的缓存支持,使用 HTTP 实体标记 (电子标签)。这允许 Web 客户端发出有条件的 HTTP 请求 一个资源,以便服务器可以告诉客户端它可以使用缓存 复制而不是返回未更改的资源。

    [...]

    ETag 标头值是资源文件名称的哈希值和 修改日期。如果您不了解哈希,请不要担心:所有您 需要知道的是,如果服务器上的文件更新了,用新的 例如一个标志的版本,这个值会改变。一旦它有一个 ETag 值,HTTP 客户端可以发出条件请求,这意味着 '只有在我得到这个资源后它没有被修改过的情况下才给我这个资源 带有此 ETag 的版本。为此,客户端包括 ETag 请求标头中的值

    【讨论】:

    • 这很好,虽然我特别询问了文件名。某些应用程序(例如 CDN)可能不适用于 ETAG。在这篇关于 Heroku 上 CDN Sumo 的文章中,没有提到 ETAG - devcenter.heroku.com/articles/cdn_sumo - 它似乎适用于唯一 URL (This way the asset is “fingerprinted” and if you ever change the file, the filename will change since it has a different “fingerprint”)
    • 对不起,如果这没有回答......我仍然没有实际的Play经验,现在只是学习。祝你好运
    猜你喜欢
    • 2019-06-17
    • 2011-04-05
    • 2011-07-30
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多