在 URL 后添加文件大小或散列以获得正确的缓存

Posted

技术标签:

【中文标题】在 URL 后添加文件大小或散列以获得正确的缓存【英文标题】:Add filesize or hash after URL to get correct caching 【发布时间】:2014-11-18 14:30:39 【问题描述】:

如果我们有一个链接到 PDF 文件的 html 文档,我正在管理一个网页。 PDF 文件会不时更新,但我们不想更改文件名。这意味着用户获取文件的旧缓存副本,并且必须手动刷新文件才能获取最新文件。

我在链接中添加了以下代码:

onClick="this.href=this.href.split('?')[0]+'?'+new Date().getTime()">

这解决了用户获取旧文件的问题,但引入了一个问题,即用户需要加载 PDF,即使它们尚未更新。这会导致更多的服务器负载和更长的用户等待时间。如果脚本检查目标文件的哈希或文件大小并将其添加到问号后面的 URL,是否可以获得类似的代码?如果这是可能的,我会克服我所有的问题。

【问题讨论】:

如何提供此页面?您可以在服务器端进行此处理,发送带有正确链接的页面。另外,在这种情况下,您可以使用ETag 来控制缓存。 在构建页面时将文件的服务器端 mtime 放入 url。这样时间戳参数只会在文件实际被修改时改变。 我非常感谢一些具体的代码示例。我不是开发人员,我还处于代码复制阶段。 【参考方案1】:

我不知道你在哪里可以访问,但我认为你可以使用 php

因此,您应该将 md5(由 md5_file() 生成)作为参数附加到您的字符串。参数只会改变,如果你上传一个新的pdf(mtime()会产生同样的效果)

【讨论】:

以上是关于在 URL 后添加文件大小或散列以获得正确的缓存的主要内容,如果未能解决你的问题,请参考以下文章

Castle ActiveRecord / NHibernate - 密码加密或散列

Django:密码格式无效或散列算法未知

在 laravel 中加密或散列电话号码

C++ 中是不是有任何函数可以计算保证至少 64 位宽的字符串的指纹或散列?

非结构化查询的性能优于集群、散列集群和索引?

PHP 实时获取文件大小