当前位置: 首页 > 知识库问答 >
问题:

资源经常变化的固定资源链接的最后修改标头?

湛骏祥
2023-03-14

目前我正在为下载资源编写一个带有运行更新的插件。这意味着我调用一个固定的endpointURL,比如:

https://www.example.com/downloads/app/latest

如果调用此URL,服务器将传送所请求资源的最新版本(例如,可执行应用程序)。资源的名称可能不同,但也可能与旧版本相同。因此,我想把一个工作的最后修改头。

基本上,我从这个问题中获得了要设置的头:使用header()强制php文件下载

$quoted = sprintf('"%s"', addcslashes(basename($file), '"\\'));
$size   = filesize($file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $quoted); 
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Pragma: public');
header('Content-Length: ' . $size);

现在我想知道如何正确设置标头,以便浏览器知道资源是否已更改。假设我有所请求资源的上次修改日期,我的猜测是:

header('Cache-Control: must-revalidate');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T', $last_modified_time));

如果我不知道最后修改日期是什么,我会写:

header('Cache-Control: no-cache');
header('Expires: 0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T'));

这是正确的(尤其是标题)还是我错过了什么?不确定,因为大量的设置缓存控制,修改日期,过期,也许其他虽然。

共有1个答案

屈俊远
2023-03-14

经过一些研究,我发现了ETag标题,它正在解决我的问题。设置 ETag 标头的工作方式如下所述:如何在 PHP 文件中使用 etag?

还找到了一些关于如何将其与Expires头结合的信息:ETag vs header Expires-ETag头至少发出一个请求来比较文件校验和,而Expires头至少发出了一个请求。

难题的最后一部分是:HTTP:ETag头是否会使Cache-Control头过时?那么,如何确保缓存控制无害呢?

因此,我现在有了完美的答案(至少我认为是这样):

$quoted = sprintf('"%s"', addcslashes(basename($file), '"\\'));
$size   = filesize($file);
$etag   = hash_file('md5', $file); 

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $quoted); 
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Pragma: public');
header('Content-Length: ' . $size);
header('Cache-Control: no-cache');
header('Expires: 0');
header('ETag: ' . $etag);
 类似资料:
  • 了解如何跨云文档使用链接资源,以提高各工作流程的工作效率。 随着设计界面的不断丰富,设计人员需要轻松协作来创建和维护一致的设计。借助链接资源,设计人员可以在云文档中创建一个基础的上下文库,包含一致扩展其设计所需的所有资源(颜色、字符样式和组件)。 借助最新版本的 Adobe XD,您不仅可以轻松共享和使用组件(以前称为符号),还可以轻松共享和使用颜色及字符样式,只需几个简单的步骤。如果您要与团队分

  • 问题内容: 我正在写一个不支持两阶段提交的资源适配器。我知道有一种称为“最后的资源优化”的优化技术。 在JBoss上,您的XAResource类应实现LastResource以便进行优化。 我的问题是:如何在WebLogic,WebSpehre,Glassfish等中完成此操作… 问题答案: Weblogic: AFAIK (可能是非常错误的),只有JDBC驱动程序可以与LRO一起使用,这 纯粹是

  • 资源链接 论文 中本聪 / 比特币:一种点对点的电子现金系统; 闪电网络:The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments; 项目工具 blockchain.info:比特币信息统计网站; bitcoin.it:比特币 wiki,相关知识介绍; 以太坊项目:https://www.ethereum.org; 以太坊

  • 我有一个房子的资源链接,如果你想查看它。它基本上只是一个黑色的主页按钮。 我有它包括和导入作为图像资产作为绘图。 我试图将其设置为按钮,但以编程方式将其更改为白色。 以下是我尝试将颜色更改为白色的方法: 知道我哪里出错了吗?

  • 我正在使用Dropwizard 8.2.0构建REST服务。我有2个资源:FolderResource和FileResource: 我做错了什么?

  • 官方网站 Docker 官方主页:https://www.docker.com Docker 官方博客:https://blog.docker.com/ Docker 官方文档:https://docs.docker.com/ Docker Hub:https://hub.docker.com Docker 的源代码仓库:https://github.com/moby/moby Docker 发布